ButtonHideFlyoutBehavior.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Reactive.Disposables;
  3. using Avalonia.Controls;
  4. namespace Avalonia.Xaml.Interactions.Custom;
  5. /// <summary>
  6. ///
  7. /// </summary>
  8. public class ButtonHideFlyoutBehavior : DisposingBehavior<Button>
  9. {
  10. /// <summary>
  11. ///
  12. /// </summary>
  13. public static readonly StyledProperty<bool> IsFlyoutOpenProperty =
  14. AvaloniaProperty.Register<ButtonHideFlyoutBehavior, bool>(nameof(IsFlyoutOpen));
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. public bool IsFlyoutOpen
  19. {
  20. get => GetValue(IsFlyoutOpenProperty);
  21. set => SetValue(IsFlyoutOpenProperty, value);
  22. }
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. /// <param name="disposables"></param>
  27. protected override void OnAttached(CompositeDisposable disposables)
  28. {
  29. var disposable = this.GetObservable(IsFlyoutOpenProperty)
  30. .Subscribe(isOpen =>
  31. {
  32. if (!isOpen)
  33. {
  34. AssociatedObject?.Flyout?.Hide();
  35. }
  36. });
  37. disposables.Add(disposable);
  38. }
  39. }