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