ImageZoomView.axaml.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Avalonia;
  2. using Avalonia.Controls;
  3. using Avalonia.Controls.PanAndZoom;
  4. using Avalonia.Input;
  5. using Avalonia.Interactivity;
  6. using Avalonia.Markup.Xaml;
  7. namespace VeloeAvaloniaKemonoPartyApp.Views;
  8. public partial class ImageZoomView : UserControl
  9. {
  10. public ImageZoomView()
  11. {
  12. InitializeComponent();
  13. }
  14. private bool _mousePressed = false;
  15. private Point _previousPoint;
  16. public void ZoomImage(object? source, PinchEventArgs args)
  17. {
  18. this.GetControl<ZoomBorder>("ZoomBorder").ZoomTo(args.Scale,args.ScaleOrigin.X,args.ScaleOrigin.Y);
  19. }
  20. public void ZoomImageEnd(object? source, PinchEndedEventArgs args)
  21. {
  22. }
  23. public void ZoomImageToDefault(object? source, RoutedEventArgs args)
  24. {
  25. this.GetControl<ZoomBorder>("ZoomBorder").Uniform();
  26. }
  27. public void PanStart(object? source, PointerPressedEventArgs args)
  28. {
  29. _mousePressed = true;
  30. _previousPoint = args.GetPosition(this.GetControl<ZoomBorder>("ZoomBorder"));
  31. }
  32. public void PanImage(object? source, PointerEventArgs args)
  33. {
  34. if (_mousePressed)
  35. {
  36. var zoomBorder = this.GetControl<ZoomBorder>("ZoomBorder");
  37. var point = args.GetPosition(zoomBorder);
  38. zoomBorder.PanDelta(point.X-_previousPoint.X,point.Y-_previousPoint.Y);
  39. _previousPoint = point;
  40. }
  41. }
  42. public void PanStop(object? source, PointerReleasedEventArgs args)
  43. {
  44. _mousePressed = false;
  45. }
  46. }