Ver código fonte

Add IsPressed property on Button

Matthijs ter Woord 8 anos atrás
pai
commit
4f902c4552
1 arquivos alterados com 13 adições e 2 exclusões
  1. 13 2
      src/Avalonia.Controls/Button.cs

+ 13 - 2
src/Avalonia.Controls/Button.cs

@@ -68,6 +68,9 @@ namespace Avalonia.Controls
         public static readonly RoutedEvent<RoutedEventArgs> ClickEvent =
             RoutedEvent.Register<Button, RoutedEventArgs>("Click", RoutingStrategies.Bubble);
 
+        public static readonly AvaloniaProperty<bool> IsPressedProperty =
+            AvaloniaProperty.RegisterDirect<Button, bool>(nameof(IsPressed), b => b.IsPressed);
+
         /// <summary>
         /// Initializes static members of the <see cref="Button"/> class.
         /// </summary>
@@ -134,6 +137,12 @@ namespace Avalonia.Controls
             set { SetValue(IsDefaultProperty, value); }
         }
 
+        public bool IsPressed
+        {
+            get { return GetValue(IsPressedProperty); }
+            private set { SetValue(IsPressedProperty, value); }
+        }
+
         /// <inheritdoc/>
         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)))