diff --git a/src/windows/wslsettings/Helpers/RuntimeHelper.cs b/src/windows/wslsettings/Helpers/RuntimeHelper.cs index 5a3592a..58e33de 100644 --- a/src/windows/wslsettings/Helpers/RuntimeHelper.cs +++ b/src/windows/wslsettings/Helpers/RuntimeHelper.cs @@ -1,7 +1,9 @@ // Copyright (C) Microsoft Corporation. All rights reserved. +using CommunityToolkit.WinUI.Controls; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; +using System.Diagnostics; using System.Reflection; using System.Runtime.InteropServices; using System.Text; @@ -47,4 +49,39 @@ public class RuntimeHelper FindNextElementOptions fneo = new() { SearchRoot = button.XamlRoot.Content }; FocusManager.TryMoveFocus(FocusNavigationDirection.Previous, fneo); } + + public static void SetupSettingsExpanderFocusManagement(Microsoft.UI.Xaml.FrameworkElement expander, Microsoft.UI.Xaml.Controls.Control firstFocusableElement) + { + if (expander is CommunityToolkit.WinUI.Controls.SettingsExpander settingsExpander) + { + settingsExpander.RegisterPropertyChangedCallback(CommunityToolkit.WinUI.Controls.SettingsExpander.IsExpandedProperty, (sender, dp) => + { + if (sender is CommunityToolkit.WinUI.Controls.SettingsExpander se && se.IsExpanded) + { + System.EventHandler? layoutHandler = null; + layoutHandler = (s, e) => + { + se.LayoutUpdated -= layoutHandler; + firstFocusableElement.Focus(Microsoft.UI.Xaml.FocusState.Keyboard); + }; + + se.LayoutUpdated += layoutHandler; + } + }); + } + } + + public static void SetupExpanderFocusManagementByName(Microsoft.UI.Xaml.FrameworkElement parent, string expanderName, string textBoxName) + { + var expander = parent.FindName(expanderName) as Microsoft.UI.Xaml.FrameworkElement; + var textBox = parent.FindName(textBoxName) as Microsoft.UI.Xaml.Controls.Control; + + Debug.Assert(expander != null, $"Expander '{expanderName}' not found"); + Debug.Assert(textBox != null, $"TextBox '{textBoxName}' not found"); + + if (expander != null && textBox != null) + { + SetupSettingsExpanderFocusManagement(expander, textBox); + } + } } \ No newline at end of file diff --git a/src/windows/wslsettings/Views/Settings/DeveloperPage.xaml b/src/windows/wslsettings/Views/Settings/DeveloperPage.xaml index db83f8a..7c1280c 100644 --- a/src/windows/wslsettings/Views/Settings/DeveloperPage.xaml +++ b/src/windows/wslsettings/Views/Settings/DeveloperPage.xaml @@ -25,12 +25,12 @@ - + -