PointersPage.xaml.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using Avalonia;
  3. using Avalonia.Controls;
  4. using Avalonia.Input;
  5. using Avalonia.Interactivity;
  6. using Avalonia.Markup.Xaml;
  7. namespace ControlCatalog.Pages;
  8. public class PointersPage : UserControl
  9. {
  10. public PointersPage()
  11. {
  12. this.InitializeComponent();
  13. var border1 = this.Get<Border>("BorderCapture1");
  14. var border2 = this.Get<Border>("BorderCapture2");
  15. border1.PointerPressed += Border_PointerPressed;
  16. border1.PointerReleased += Border_PointerReleased;
  17. border1.PointerCaptureLost += Border_PointerCaptureLost;
  18. border1.PointerMoved += Border_PointerUpdated;
  19. border1.PointerEntered += Border_PointerUpdated;
  20. border1.PointerExited += Border_PointerUpdated;
  21. border2.PointerPressed += Border_PointerPressed;
  22. border2.PointerReleased += Border_PointerReleased;
  23. border2.PointerCaptureLost += Border_PointerCaptureLost;
  24. border2.PointerMoved += Border_PointerUpdated;
  25. border2.PointerEntered += Border_PointerUpdated;
  26. border2.PointerExited += Border_PointerUpdated;
  27. }
  28. private void Border_PointerUpdated(object sender, PointerEventArgs e)
  29. {
  30. var textBlock = (TextBlock)((Border)sender).Child;
  31. var position = e.GetPosition((Border)sender);
  32. textBlock.Text = @$"Type: {e.Pointer.Type}
  33. Captured: {e.Pointer.Captured == sender}
  34. PointerId: {e.Pointer.Id}
  35. Position: {(int)position.X} {(int)position.Y}";
  36. e.Handled = true;
  37. }
  38. private void Border_PointerCaptureLost(object sender, PointerCaptureLostEventArgs e)
  39. {
  40. var textBlock = (TextBlock)((Border)sender).Child;
  41. textBlock.Text = @$"Type: {e.Pointer.Type}
  42. Captured: {e.Pointer.Captured == sender}
  43. PointerId: {e.Pointer.Id}
  44. Position: ??? ???";
  45. e.Handled = true;
  46. }
  47. private void Border_PointerReleased(object sender, PointerReleasedEventArgs e)
  48. {
  49. if (e.Pointer.Captured == sender)
  50. {
  51. e.Pointer.Capture(null);
  52. e.Handled = true;
  53. }
  54. else
  55. {
  56. throw new InvalidOperationException("How?");
  57. }
  58. }
  59. private void Border_PointerPressed(object sender, PointerPressedEventArgs e)
  60. {
  61. e.Pointer.Capture((Border)sender);
  62. e.Handled = true;
  63. }
  64. private void InitializeComponent()
  65. {
  66. AvaloniaXamlLoader.Load(this);
  67. }
  68. }