Browse Source

Button Flyout StyledProperty and add change handler

pull/5682/head
amwx 5 years ago
parent
commit
f7d100e7bd
  1. 22
      src/Avalonia.Controls/Button.cs

22
src/Avalonia.Controls/Button.cs

@ -82,14 +82,12 @@ namespace Avalonia.Controls
/// <summary>
/// Defines the <see cref="Flyout"/> property
/// </summary>
public static readonly DirectProperty<Button, FlyoutBase> FlyoutProperty =
AvaloniaProperty.RegisterDirect<Button, FlyoutBase>(nameof(Flyout),
x => x.Flyout, (x, v) => x.Flyout = v);
public static readonly StyledProperty<FlyoutBase> FlyoutProperty =
AvaloniaProperty.Register<Button, FlyoutBase>(nameof(Flyout));
private ICommand _command;
private bool _commandCanExecute = true;
private KeyGesture _hotkey;
private FlyoutBase _flyout;
/// <summary>
/// Initializes static members of the <see cref="Button"/> class.
@ -183,8 +181,8 @@ namespace Avalonia.Controls
/// </summary>
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);
}
/// <inheritdoc/>
@ -361,6 +359,16 @@ namespace Avalonia.Controls
{
UpdatePseudoClasses(change.NewValue.GetValueOrDefault<bool>());
}
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<T>(AvaloniaProperty<T> property, BindingValue<T> value)

Loading…
Cancel
Save