using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Xaml.Interactivity; namespace Avalonia.Xaml.Interactions.Custom; /// /// A behavior that allows to hide control on lost focus event. /// public class HideOnLostFocusBehavior : StyledElementBehavior { /// /// Identifies the avalonia property. /// public static readonly StyledProperty TargetControlProperty = AvaloniaProperty.Register(nameof(TargetControl)); /// /// Gets or sets the target control. This is a avalonia property. /// [ResolveByName] public Control? TargetControl { get => GetValue(TargetControlProperty); set => SetValue(TargetControlProperty, value); } /// protected override void OnAttachedToVisualTree() { AssociatedObject?.AddHandler(InputElement.LostFocusEvent, AssociatedObject_LostFocus, RoutingStrategies.Tunnel | RoutingStrategies.Bubble); } /// protected override void OnDetachedFromVisualTree() { AssociatedObject?.RemoveHandler(InputElement.LostFocusEvent, AssociatedObject_LostFocus); } private void AssociatedObject_LostFocus(object? sender, RoutedEventArgs e) { if (TargetControl is not null) { TargetControl.IsVisible = false; } } }