diff --git a/src/Files.App/Dialogs/SettingsDialog.xaml b/src/Files.App/Dialogs/SettingsDialog.xaml
index 451a492f67d2..5532ccd71123 100644
--- a/src/Files.App/Dialogs/SettingsDialog.xaml
+++ b/src/Files.App/Dialogs/SettingsDialog.xaml
@@ -82,6 +82,26 @@
PaneDisplayMode="Left"
SelectionChanged="MainSettingsNavigationView_SelectionChanged">
+
+
+
+
+
+
+
+
+
+
Text; // Ensures dropdown shows search text
+ }
+
+ private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
+ {
+ if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
+ {
+ var query = sender.Text;
+ var results = SearchSettingsPages(query);
+
+ // Store actual objects instead of just text
+ sender.ItemsSource = results;
+ }
+ }
+
+ private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
+ {
+ var query = args.QueryText;
+ var results = SearchSettingsPages(query);
+ sender.ItemsSource = results;
+ }
+
+ private void NavViewSearchBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
+ {
+ if (args.SelectedItem is SearchResultItem selectedItem)
+ {
+ SettingsContentFrame.Navigate(selectedItem.ParentPage.GetType());
+ NavViewSearchBox.Text = string.Empty;
+ }
+ }
+
+ private IEnumerable SearchVisualTreeForText(DependencyObject parent, string query)
+ {
+ var results = new List();
+
+ for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
+ {
+ var child = VisualTreeHelper.GetChild(parent, i);
+
+ if (child is FrameworkElement element)
+ {
+ if (element is TextBlock textBlock && textBlock.Text.Contains(query, StringComparison.OrdinalIgnoreCase))
+ results.Add(textBlock.Text);
+ else if (element is SettingsCard settingsCard && settingsCard.Header is string headerText &&
+ headerText.Contains(query, StringComparison.OrdinalIgnoreCase))
+ results.Add(headerText);
+ else if (element is SettingsExpander settingsExpander)
+ {
+ if (settingsExpander.Header is string expanderHeader &&
+ expanderHeader.Contains(query, StringComparison.OrdinalIgnoreCase))
+ results.Add(expanderHeader);
+
+ results.AddRange(SearchVisualTreeForText(settingsExpander, query));
+
+ results.AddRange(settingsExpander.Items.OfType()
+ .Select(subCard => subCard.Header)
+ .OfType()
+ .Where(subCardHeader => subCardHeader.Contains(query, StringComparison.OrdinalIgnoreCase)));
+ }
+ }
+
+ results.AddRange(SearchVisualTreeForText(child, query));
+ }
+
+ return results;
+ }
+
+
+ private IEnumerable SearchSettingsPages(string query)
+ {
+ var results = new List();
+
+ var settingsPages = new List
+ {
+ new AboutPage(),
+ new AppearancePage(),
+ new TagsPage(),
+ new DevToolsPage(),
+ new GeneralPage(),
+ new FoldersPage(),
+ };
+
+ foreach (var page in settingsPages)
+ {
+ var matches = SearchVisualTreeForText(page, query);
+ foreach (var match in matches)
+ {
+ results.Add(new SearchResultItem { Text = match, ParentPage = page });
+ }
+ }
+
+ return results;
+ }
+
}
}