From 4f902c455257549535306ad08c2fbb5f421c13d5 Mon Sep 17 00:00:00 2001 From: Matthijs ter Woord Date: Tue, 22 Aug 2017 18:17:36 +0200 Subject: [PATCH 1/5] Add IsPressed property on Button --- src/Avalonia.Controls/Button.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Button.cs b/src/Avalonia.Controls/Button.cs index 78bbd836be..dee8969a17 100644 --- a/src/Avalonia.Controls/Button.cs +++ b/src/Avalonia.Controls/Button.cs @@ -68,6 +68,9 @@ namespace Avalonia.Controls public static readonly RoutedEvent ClickEvent = RoutedEvent.Register("Click", RoutingStrategies.Bubble); + public static readonly AvaloniaProperty IsPressedProperty = + AvaloniaProperty.RegisterDirect(nameof(IsPressed), b => b.IsPressed); + /// /// Initializes static members of the class. /// @@ -134,6 +137,12 @@ namespace Avalonia.Controls set { SetValue(IsDefaultProperty, value); } } + public bool IsPressed + { + get { return GetValue(IsPressedProperty); } + private set { SetValue(IsPressedProperty, value); } + } + /// protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { @@ -164,7 +173,7 @@ namespace Avalonia.Controls { RaiseClickEvent(); } - + IsPressed = true; e.Handled = true; } @@ -180,7 +189,7 @@ namespace Avalonia.Controls { RaiseClickEvent(); } - + IsPressed = false; e.Handled = true; } } @@ -223,6 +232,7 @@ namespace Avalonia.Controls { PseudoClasses.Add(":pressed"); e.Device.Capture(this); + IsPressed = true; e.Handled = true; if (ClickMode == ClickMode.Press) @@ -241,6 +251,7 @@ namespace Avalonia.Controls { e.Device.Capture(null); PseudoClasses.Remove(":pressed"); + IsPressed = false; e.Handled = true; if (ClickMode == ClickMode.Release && new Rect(Bounds.Size).Contains(e.GetPosition(this))) From bfd7de2427c26edeae56b38985f2741fc54aadba Mon Sep 17 00:00:00 2001 From: Matthijs ter Woord Date: Tue, 22 Aug 2017 18:37:08 +0200 Subject: [PATCH 2/5] IsPressed property should be a StyledProperty, otherwise stackoverflow occurs --- src/Avalonia.Controls/Button.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Button.cs b/src/Avalonia.Controls/Button.cs index 964ffbbac4..a5ace095b6 100644 --- a/src/Avalonia.Controls/Button.cs +++ b/src/Avalonia.Controls/Button.cs @@ -72,8 +72,8 @@ namespace Avalonia.Controls private ICommand _command; - public static readonly AvaloniaProperty IsPressedProperty = - AvaloniaProperty.RegisterDirect(nameof(IsPressed), b => b.IsPressed); + public static readonly StyledProperty IsPressedProperty = + AvaloniaProperty.Register(nameof(IsPressed)); /// /// Initializes static members of the class. From 981cf5a2f158e34a1f28db10af3c3c988013d900 Mon Sep 17 00:00:00 2001 From: Matthijs ter Woord Date: Fri, 1 Sep 2017 15:17:09 +0200 Subject: [PATCH 3/5] Now we have .IsPressed property, have the PseudoClass method handle that for us. --- src/Avalonia.Controls/Button.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Button.cs b/src/Avalonia.Controls/Button.cs index a5ace095b6..aa486422fd 100644 --- a/src/Avalonia.Controls/Button.cs +++ b/src/Avalonia.Controls/Button.cs @@ -84,6 +84,7 @@ namespace Avalonia.Controls ClickEvent.AddClassHandler