using System; using System.Reactive.Disposables; using Avalonia.Controls; using Avalonia.Controls.Primitives; namespace Avalonia.Xaml.Interactions.Custom; /// /// /// public class HideAttachedFlyoutBehavior : DisposingBehavior { /// /// /// public static readonly StyledProperty IsFlyoutOpenProperty = AvaloniaProperty.Register(nameof(IsFlyoutOpen)); /// /// /// public bool IsFlyoutOpen { get => GetValue(IsFlyoutOpenProperty); set => SetValue(IsFlyoutOpenProperty, value); } /// /// /// /// protected override void OnAttached(CompositeDisposable disposables) { var disposable = this.GetObservable(IsFlyoutOpenProperty) .Subscribe(isOpen => { if (!isOpen && AssociatedObject is not null) { FlyoutBase.GetAttachedFlyout(AssociatedObject)?.Hide(); } }); disposables.Add(disposable); } }