Browse Source

Added missing class event handler methods (#18837)

* Added missing class event handler methods

* Moved handling of Holding event in Control to the class method

* Exposed Gesture.RightTappedEvent as InputElement.RightTapped and added a class handler
This event was already being raised, but you wouldn't know about it unless you looked into Avalonia's internals
pull/19096/head
Tom Edwards 1 year ago
committed by GitHub
parent
commit
64ab38f3d2
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 59
      src/Avalonia.Base/Input/InputElement.cs
  2. 8
      src/Avalonia.Controls/Control.cs

59
src/Avalonia.Base/Input/InputElement.cs

@ -199,6 +199,11 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<TappedEventArgs> TappedEvent = Gestures.TappedEvent;
/// <summary>
/// Defines the <see cref="RightTapped"/> event.
/// </summary>
public static readonly RoutedEvent<TappedEventArgs> RightTappedEvent = Gestures.RightTappedEvent;
/// <summary>
/// Defines the <see cref="Holding"/> event.
/// </summary>
@ -238,6 +243,11 @@ namespace Avalonia.Input
PointerCaptureLostEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerCaptureLost(e));
PointerWheelChangedEvent.AddClassHandler<InputElement>((x, e) => x.OnPointerWheelChanged(e));
TappedEvent.AddClassHandler<InputElement>((x, e) => x.OnTapped(e));
RightTappedEvent.AddClassHandler<InputElement>((x, e) => x.OnRightTapped(e));
DoubleTappedEvent.AddClassHandler<InputElement>((x, e) => x.OnDoubleTapped(e));
HoldingEvent.AddClassHandler<InputElement>((x, e) => x.OnHolding(e));
// Gesture only handlers
PointerMovedEvent.AddClassHandler<InputElement>((x, e) => x.OnGesturePointerMoved(e), handledEventsToo: true);
PointerPressedEvent.AddClassHandler<InputElement>((x, e) => x.OnGesturePointerPressed(e), handledEventsToo: true);
@ -399,6 +409,15 @@ namespace Avalonia.Input
remove { RemoveHandler(TappedEvent, value); }
}
/// <summary>
/// Occurs when a right tap gesture occurs on the control.
/// </summary>
public event EventHandler<TappedEventArgs>? RightTapped
{
add { AddHandler(RightTappedEvent, value); }
remove { RemoveHandler(RightTappedEvent, value); }
}
/// <summary>
/// Occurs when a hold gesture occurs on the control.
/// </summary>
@ -746,6 +765,46 @@ namespace Avalonia.Input
{
}
/// <summary>
/// Invoked when an unhandled <see cref="TappedEvent"/> reaches an element in its
/// route that is derived from this class. Implement this method to add class handling
/// for this event.
/// </summary>
/// <param name="e">Data about the event.</param>
protected virtual void OnTapped(TappedEventArgs e)
{
}
/// <summary>
/// Invoked when an unhandled <see cref="RightTappedEvent"/> reaches an element in its
/// route that is derived from this class. Implement this method to add class handling
/// for this event.
/// </summary>
/// <param name="e">Data about the event.</param>
protected virtual void OnRightTapped(TappedEventArgs e)
{
}
/// <summary>
/// Invoked when an unhandled <see cref="DoubleTappedEvent"/> reaches an element in its
/// route that is derived from this class. Implement this method to add class handling
/// for this event.
/// </summary>
/// <param name="e">Data about the event.</param>
protected virtual void OnDoubleTapped(TappedEventArgs e)
{
}
/// <summary>
/// Invoked when an unhandled <see cref="HoldingEvent"/> reaches an element in its
/// route that is derived from this class. Implement this method to add class handling
/// for this event.
/// </summary>
/// <param name="e">Data about the event.</param>
protected virtual void OnHolding(HoldingRoutedEventArgs e)
{
}
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);

8
src/Avalonia.Controls/Control.cs

@ -386,12 +386,12 @@ namespace Avalonia.Controls
InitializeIfNeeded();
ScheduleOnLoadedCore();
Holding += OnHoldEvent;
}
private void OnHoldEvent(object? sender, HoldingRoutedEventArgs e)
protected override void OnHolding(HoldingRoutedEventArgs e)
{
base.OnHolding(e);
if (e.Source == this && !e.Handled && e.HoldingState == HoldingState.Started)
{
// Trigger ContentRequest when hold has started
@ -408,8 +408,6 @@ namespace Avalonia.Controls
base.OnDetachedFromVisualTreeCore(e);
OnUnloadedCore();
Holding -= OnHoldEvent;
}
/// <inheritdoc/>

Loading…
Cancel
Save