From f7d100e7bd6304522ce05dae41bbd838943df0ee Mon Sep 17 00:00:00 2001 From: amwx Date: Sun, 21 Mar 2021 17:34:43 -0500 Subject: [PATCH] Button Flyout StyledProperty and add change handler --- src/Avalonia.Controls/Button.cs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Controls/Button.cs b/src/Avalonia.Controls/Button.cs index 16bb3c4377..4fe385a782 100644 --- a/src/Avalonia.Controls/Button.cs +++ b/src/Avalonia.Controls/Button.cs @@ -82,14 +82,12 @@ namespace Avalonia.Controls /// /// Defines the property /// - public static readonly DirectProperty FlyoutProperty = - AvaloniaProperty.RegisterDirect(nameof(Flyout), - x => x.Flyout, (x, v) => x.Flyout = v); + public static readonly StyledProperty FlyoutProperty = + AvaloniaProperty.Register(nameof(Flyout)); private ICommand _command; private bool _commandCanExecute = true; private KeyGesture _hotkey; - private FlyoutBase _flyout; /// /// Initializes static members of the class. @@ -183,8 +181,8 @@ namespace Avalonia.Controls /// public FlyoutBase Flyout { - get => _flyout; - set => SetAndRaise(FlyoutProperty, ref _flyout, value); + get => GetValue(FlyoutProperty); + set => SetValue(FlyoutProperty, value); } protected override bool IsEnabledCore => base.IsEnabledCore && _commandCanExecute; @@ -310,7 +308,7 @@ namespace Avalonia.Controls protected virtual void OpenFlyout() { - _flyout?.ShowAt(this); + Flyout?.ShowAt(this); } /// @@ -361,6 +359,16 @@ namespace Avalonia.Controls { UpdatePseudoClasses(change.NewValue.GetValueOrDefault()); } + else if (change.Property == FlyoutProperty) + { + // If flyout is changed while one is already open, make sure we + // close the old one first + if (change.OldValue.GetValueOrDefault() is FlyoutBase oldFlyout && + oldFlyout.IsOpen) + { + oldFlyout.Hide(); + } + } } protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)