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;
}
}
}