Browse Source

Button Flyout StyledProperty and add change handler

pull/5682/head
amwx 6 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> /// <summary>
/// Defines the <see cref="Flyout"/> property /// Defines the <see cref="Flyout"/> property
/// </summary> /// </summary>
public static readonly DirectProperty<Button, FlyoutBase> FlyoutProperty = public static readonly StyledProperty<FlyoutBase> FlyoutProperty =
AvaloniaProperty.RegisterDirect<Button, FlyoutBase>(nameof(Flyout), AvaloniaProperty.Register<Button, FlyoutBase>(nameof(Flyout));
x => x.Flyout, (x, v) => x.Flyout = v);
private ICommand _command; private ICommand _command;
private bool _commandCanExecute = true; private bool _commandCanExecute = true;
private KeyGesture _hotkey; private KeyGesture _hotkey;
private FlyoutBase _flyout;
/// <summary> /// <summary>
/// Initializes static members of the <see cref="Button"/> class. /// Initializes static members of the <see cref="Button"/> class.
@ -183,8 +181,8 @@ namespace Avalonia.Controls
/// </summary> /// </summary>
public FlyoutBase Flyout public FlyoutBase Flyout
{ {
get => _flyout; get => GetValue(FlyoutProperty);
set => SetAndRaise(FlyoutProperty, ref _flyout, value); set => SetValue(FlyoutProperty, value);
} }
protected override bool IsEnabledCore => base.IsEnabledCore && _commandCanExecute; protected override bool IsEnabledCore => base.IsEnabledCore && _commandCanExecute;
@ -310,7 +308,7 @@ namespace Avalonia.Controls
protected virtual void OpenFlyout() protected virtual void OpenFlyout()
{ {
_flyout?.ShowAt(this); Flyout?.ShowAt(this);
} }
/// <inheritdoc/> /// <inheritdoc/>
@ -361,6 +359,16 @@ namespace Avalonia.Controls
{ {
UpdatePseudoClasses(change.NewValue.GetValueOrDefault<bool>()); 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) protected override void UpdateDataValidation<T>(AvaloniaProperty<T> property, BindingValue<T> value)

Loading…
Cancel
Save