using Avalonia.Controls;
using Avalonia.Xaml.Interactivity;
using CommunityToolkit.Mvvm.Messaging;
namespace Nitrox.Launcher.Models.Behaviors;
///
/// Focuses the when its parent view is shown.
///
public class FocusOnViewShowBehavior : Behavior
{
protected override void OnAttached()
{
WeakReferenceMessenger.Default.Register(this, static (obj, _) => (obj as FocusOnViewShowBehavior)?.Focus());
base.OnAttached();
}
protected override void OnDetaching()
{
WeakReferenceMessenger.Default.UnregisterAll(this);
base.OnDetaching();
}
protected override void OnAttachedToVisualTree() => Focus();
private void Focus()
{
if (AssociatedObject == null)
{
return;
}
if (!AssociatedObject.IsEffectivelyVisible)
{
return;
}
AssociatedObject.Focus();
if (AssociatedObject is TextBox textBox)
{
textBox.SelectAll();
}
}
}