PointersPage.xaml.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using Avalonia.Controls;
  3. using Avalonia.Input;
  4. namespace ControlCatalog.Pages;
  5. public partial class PointersPage : UserControl
  6. {
  7. public PointersPage()
  8. {
  9. InitializeComponent();
  10. }
  11. private void Border_PointerUpdated(object? sender, PointerEventArgs e)
  12. {
  13. if (sender is Border border && border.Child is TextBlock textBlock)
  14. {
  15. var position = e.GetPosition(border);
  16. textBlock.Text = @$"Type: {e.Pointer.Type}
  17. Captured: {e.Pointer.Captured == sender}
  18. PointerId: {e.Pointer.Id}
  19. Position: {(int)position.X} {(int)position.Y}";
  20. e.Handled = true;
  21. }
  22. }
  23. private void Border_PointerCaptureLost(object? sender, PointerCaptureLostEventArgs e)
  24. {
  25. if (sender is Border border && border.Child is TextBlock textBlock)
  26. {
  27. textBlock.Text = @$"Type: {e.Pointer.Type}
  28. Captured: {e.Pointer.Captured == sender}
  29. PointerId: {e.Pointer.Id}
  30. Position: ??? ???";
  31. e.Handled = true;
  32. }
  33. }
  34. private void Border_PointerReleased(object? sender, PointerReleasedEventArgs e)
  35. {
  36. if (e.Pointer.Captured == sender)
  37. {
  38. e.Pointer.Capture(null);
  39. e.Handled = true;
  40. }
  41. else if (e.Pointer.Captured is not null)
  42. {
  43. throw new InvalidOperationException("How?");
  44. }
  45. }
  46. private void Border_PointerPressed(object? sender, PointerPressedEventArgs e)
  47. {
  48. e.Pointer.Capture(sender as Border);
  49. e.Handled = true;
  50. e.PreventGestureRecognition();
  51. }
  52. }