From 68eaad70a0ba742121ef3843b8bbad085ed16a39 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Wed, 4 Mar 2026 12:40:08 +0000 Subject: [PATCH] Add gesture CLR events to InputElement (#20806) * Add gesture CLR events to InputElement * Update API suppressions * Use nameof in InputElement.Gestures --- api/Avalonia.nupkg.xml | 244 +++++++++++++++++- .../Input/InputElement.Gestures.cs | 202 ++++++++++----- 2 files changed, 374 insertions(+), 72 deletions(-) diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml index 6add9ec307..e0f0fa2956 100644 --- a/api/Avalonia.nupkg.xml +++ b/api/Avalonia.nupkg.xml @@ -1,4 +1,4 @@ - + @@ -1057,6 +1057,126 @@ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll current/Avalonia/lib/net10.0/Avalonia.Base.dll + + CP0002 + M:Avalonia.Input.InputElement.AddPinchEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEndedEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPinchHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPointerTouchPadGestureMagnifyHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPointerTouchPadGestureRotateHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPointerTouchPadGestureSwipeHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPullGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEndedEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPullGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddScrollGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEndedEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddScrollGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddScrollGestureInertiaStartingHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureInertiaStartingEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePinchEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEndedEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePinchHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePointerTouchPadGestureMagnifyHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePointerTouchPadGestureRotateHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePointerTouchPadGestureSwipeHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePullGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEndedEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePullGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemoveScrollGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEndedEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemoveScrollGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemoveScrollGestureInertiaStartingHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureInertiaStartingEventArgs}) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + CP0002 M:Avalonia.Input.KeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers) @@ -2251,6 +2371,126 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0002 + M:Avalonia.Input.InputElement.AddPinchEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEndedEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPinchHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPointerTouchPadGestureMagnifyHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPointerTouchPadGestureRotateHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPointerTouchPadGestureSwipeHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPullGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEndedEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddPullGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddScrollGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEndedEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddScrollGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.AddScrollGestureInertiaStartingHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureInertiaStartingEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePinchEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEndedEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePinchHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePointerTouchPadGestureMagnifyHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePointerTouchPadGestureRotateHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePointerTouchPadGestureSwipeHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PointerDeltaEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePullGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEndedEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemovePullGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PullGestureEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemoveScrollGestureEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEndedEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemoveScrollGestureHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.InputElement.RemoveScrollGestureInertiaStartingHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.ScrollGestureInertiaStartingEventArgs}) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + CP0002 M:Avalonia.Input.KeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers) @@ -4273,4 +4513,4 @@ baseline/Avalonia/lib/netstandard2.0/Avalonia.Base.dll current/Avalonia/lib/netstandard2.0/Avalonia.Base.dll - \ No newline at end of file + diff --git a/src/Avalonia.Base/Input/InputElement.Gestures.cs b/src/Avalonia.Base/Input/InputElement.Gestures.cs index 25f6362d60..88b1045a61 100644 --- a/src/Avalonia.Base/Input/InputElement.Gestures.cs +++ b/src/Avalonia.Base/Input/InputElement.Gestures.cs @@ -19,45 +19,75 @@ namespace Avalonia.Input public static readonly AttachedProperty IsHoldWithMouseEnabledProperty = AvaloniaProperty.RegisterAttached("IsHoldWithMouseEnabled", typeof(InputElement), false); + /// + /// Defines the event. + /// public static readonly RoutedEvent PinchEvent = - RoutedEvent.Register( - "Pinch", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(Pinch), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent PinchEndedEvent = - RoutedEvent.Register( - "PinchEnded", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(PinchEnded), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent PullGestureEvent = - RoutedEvent.Register( - "PullGesture", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(PullGesture), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent PullGestureEndedEvent = - RoutedEvent.Register( - "PullGestureEnded", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(PullGestureEnded), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent ScrollGestureEvent = - RoutedEvent.Register( - "ScrollGesture", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(ScrollGesture), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent ScrollGestureInertiaStartingEvent = - RoutedEvent.Register( - "ScrollGestureInertiaStarting", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(ScrollGestureInertiaStarting), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent ScrollGestureEndedEvent = - RoutedEvent.Register( - "ScrollGestureEnded", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(ScrollGestureEnded), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent PointerTouchPadGestureMagnifyEvent = - RoutedEvent.Register( - "PointerTouchPadGestureMagnify", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(PointerTouchPadGestureMagnify), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent PointerTouchPadGestureRotateEvent = - RoutedEvent.Register( - "PointerTouchPadGestureRotate", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(PointerTouchPadGestureRotate), RoutingStrategies.Bubble); + /// + /// Defines the event. + /// public static readonly RoutedEvent PointerTouchPadGestureSwipeEvent = - RoutedEvent.Register( - "PointerTouchPadGestureSwipe", RoutingStrategies.Bubble, typeof(InputElement)); + RoutedEvent.Register( + nameof(PointerTouchPadGestureSwipe), RoutingStrategies.Bubble); /// /// Defines the event. @@ -95,6 +125,7 @@ namespace Avalonia.Input { return element.GetValue(IsHoldingEnabledProperty); } + public static void SetIsHoldingEnabled(StyledElement element, bool value) { element.SetValue(IsHoldingEnabledProperty, value); @@ -104,70 +135,101 @@ namespace Avalonia.Input { return element.GetValue(IsHoldWithMouseEnabledProperty); } + public static void SetIsHoldWithMouseEnabled(StyledElement element, bool value) { element.SetValue(IsHoldWithMouseEnabledProperty, value); } - public static void AddPinchHandler(Interactive element, EventHandler handler) => - element.AddHandler(PinchEvent, handler); - - public static void AddPinchEndedHandler(Interactive element, EventHandler handler) => - element.AddHandler(PinchEndedEvent, handler); - - public static void AddPullGestureHandler(Interactive element, EventHandler handler) => - element.AddHandler(PullGestureEvent, handler); - - public static void AddPullGestureEndedHandler(Interactive element, EventHandler handler) => - element.AddHandler(PullGestureEndedEvent, handler); - - public static void RemovePinchHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(PinchEvent, handler); - - public static void RemovePinchEndedHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(PinchEndedEvent, handler); - - public static void RemovePullGestureHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(PullGestureEvent, handler); - - public static void RemovePullGestureEndedHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(PullGestureEndedEvent, handler); - - public static void AddPointerTouchPadGestureMagnifyHandler(Interactive element, EventHandler handler) => - element.AddHandler(PointerTouchPadGestureMagnifyEvent, handler); - - public static void AddPointerTouchPadGestureRotateHandler(Interactive element, EventHandler handler) => - element.AddHandler(PointerTouchPadGestureRotateEvent, handler); - - public static void AddPointerTouchPadGestureSwipeHandler(Interactive element, EventHandler handler) => - element.AddHandler(PointerTouchPadGestureSwipeEvent, handler); + /// + /// Occurs when a pinch gesture occurs on the control. + /// + public event EventHandler? Pinch + { + add { AddHandler(PinchEvent, value); } + remove { RemoveHandler(PinchEvent, value); } + } - public static void AddScrollGestureHandler(Interactive element, EventHandler handler) => - element.AddHandler(ScrollGestureEvent, handler); + /// + /// Occurs when a pinch gesture ends on the control. + /// + public event EventHandler? PinchEnded + { + add { AddHandler(PinchEndedEvent, value); } + remove { RemoveHandler(PinchEndedEvent, value); } + } - public static void AddScrollGestureEndedHandler(Interactive element, EventHandler handler) => - element.AddHandler(ScrollGestureEndedEvent, handler); + /// + /// Occurs when a pull gesture occurs on the control. + /// + public event EventHandler? PullGesture + { + add { AddHandler(PullGestureEvent, value); } + remove { RemoveHandler(PullGestureEvent, value); } + } - public static void AddScrollGestureInertiaStartingHandler(Interactive element, EventHandler handler) => - element.AddHandler(ScrollGestureInertiaStartingEvent, handler); + /// + /// Occurs when a pull gesture ends on the control. + /// + public event EventHandler? PullGestureEnded + { + add { AddHandler(PullGestureEndedEvent, value); } + remove { RemoveHandler(PullGestureEndedEvent, value); } + } - public static void RemovePointerTouchPadGestureMagnifyHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(PointerTouchPadGestureMagnifyEvent, handler); + /// + /// Occurs when a scroll gesture occurs on the control. + /// + public event EventHandler? ScrollGesture + { + add { AddHandler(ScrollGestureEvent, value); } + remove { RemoveHandler(ScrollGestureEvent, value); } + } - public static void RemovePointerTouchPadGestureRotateHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(PointerTouchPadGestureRotateEvent, handler); + /// + /// Occurs when a scroll gesture inertia starts on the control. + /// + public event EventHandler? ScrollGestureInertiaStarting + { + add { AddHandler(ScrollGestureInertiaStartingEvent, value); } + remove { RemoveHandler(ScrollGestureInertiaStartingEvent, value); } + } - public static void RemovePointerTouchPadGestureSwipeHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(PointerTouchPadGestureSwipeEvent, handler); + /// + /// Occurs when a scroll gesture ends on the control. + /// + public event EventHandler? ScrollGestureEnded + { + add { AddHandler(ScrollGestureEndedEvent, value); } + remove { RemoveHandler(ScrollGestureEndedEvent, value); } + } - public static void RemoveScrollGestureHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(ScrollGestureEvent, handler); + /// + /// Occurs when a touchpad magnify gesture occurs on the control. + /// + public event EventHandler? PointerTouchPadGestureMagnify + { + add { AddHandler(PointerTouchPadGestureMagnifyEvent, value); } + remove { RemoveHandler(PointerTouchPadGestureMagnifyEvent, value); } + } - public static void RemoveScrollGestureEndedHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(ScrollGestureEndedEvent, handler); + /// + /// Occurs when a touchpad rotate gesture occurs on the control. + /// + public event EventHandler? PointerTouchPadGestureRotate + { + add { AddHandler(PointerTouchPadGestureRotateEvent, value); } + remove { RemoveHandler(PointerTouchPadGestureRotateEvent, value); } + } - public static void RemoveScrollGestureInertiaStartingHandler(Interactive element, EventHandler handler) => - element.RemoveHandler(ScrollGestureInertiaStartingEvent, handler); + /// + /// Occurs when a touchpad swipe gesture occurs on the control. + /// + public event EventHandler? PointerTouchPadGestureSwipe + { + add { AddHandler(PointerTouchPadGestureSwipeEvent, value); } + remove { RemoveHandler(PointerTouchPadGestureSwipeEvent, value); } + } /// /// Occurs when a tap gesture occurs on the control.