diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml index 1c0142d..1c5aca6 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml +++ b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml @@ -567,7 +567,8 @@ Background="{DynamicResource BarelyTransparentBackgroundColor}" HorizontalAlignment="Stretch" IsVisible="{Binding DialogService.ReadInput^, Converter={x:Static ObjectConverters.IsNotNull}}" - VerticalAlignment="Stretch"> + VerticalAlignment="Stretch" + x:Name="ReadInputContainer"> @@ -604,6 +607,7 @@ IsVisible="{Binding Type, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static interactions:InputType.Options}}" ItemsSource="{Binding Options}" SelectedItem="{Binding Value}" + Tag="InputItem" x:DataType="interactions:IOptionsInputElement" /> diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs index 6bbae17..f429c21 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs +++ b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs @@ -1,6 +1,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Input; +using Avalonia.VisualTree; using DynamicData; using FileTime.App.Core.Services; using FileTime.App.Core.ViewModels; @@ -38,6 +39,8 @@ public partial class MainWindow : Window _modalService.OpenModals.ToCollection().Subscribe(m => _openModals = m); DI.ServiceProvider.GetRequiredService().TopLevel = GetTopLevel(this); InitializeComponent(); + + ReadInputContainer.PropertyChanged += ReadInputContainerOnPropertyChanged; } private void OnWindowOpened(object sender, EventArgs e) @@ -110,6 +113,19 @@ public partial class MainWindow : Window } } + private async void ReadInputContainerOnPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e) + { + if (e.Property.Name == nameof(ReadInputContainer.IsVisible) && ReadInputContainer.IsVisible) + { + await Task.Delay(100); + var inputElement = InputList + .GetVisualDescendants() + .OfType() + .FirstOrDefault(i => i.Tag as string == "InputItem" && i.IsVisible); + inputElement?.Focus(); + } + } + private void OnWindowClosed(object? sender, EventArgs e) { var vm = ViewModel;