From 6ca19a53bb5a7e81b09048c0ebc31de4c1b88f2c Mon Sep 17 00:00:00 2001 From: Jaime Bernardo Date: Tue, 5 Mar 2024 21:42:02 +0000 Subject: [PATCH] Fix Navigation Footer items crashing the Settings app --- .../SettingsXAML/Views/ShellPage.xaml | 30 +++++++++---------- .../SettingsXAML/Views/ShellPage.xaml.cs | 6 +++- .../Settings.UI/ViewModels/ShellViewModel.cs | 10 +++++-- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml index df87d39218..e7f878da53 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml @@ -225,22 +225,20 @@ Icon="{ui:BitmapIcon Source=/Assets/Settings/Icons/VideoConferenceMute.png}" IsEnabled="{x:Bind ViewModel.IsVideoConferenceBuild, Mode=OneWay}" /> - - - - - - - + + + + + diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs index 4a5f66c11a..952997f399 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs @@ -347,7 +347,11 @@ namespace Microsoft.PowerToys.Settings.UI.Views if (selectedItem != null) { Type pageType = selectedItem.GetValue(NavHelper.NavigateToProperty) as Type; - NavigationService.Navigate(pageType); + if (pageType != null) + { + // pageType might be null because of the navigation bar footer items. + NavigationService.Navigate(pageType); + } } } diff --git a/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs index b222c4ddf9..5776e38f73 100644 --- a/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs @@ -108,9 +108,13 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels { var item = navigationView.MenuItems .OfType() - .First(menuItem => (string)menuItem.Content == (string)args.InvokedItem); - var pageType = item.GetValue(NavHelper.NavigateToProperty) as Type; - NavigationService.Navigate(pageType); + .FirstOrDefault(menuItem => (string)menuItem.Content == (string)args.InvokedItem, null); + if (item != null) + { + // item might be null because of the navigation bar footer items. + var pageType = item.GetValue(NavHelper.NavigateToProperty) as Type; + NavigationService.Navigate(pageType); + } } private void OnBackRequested(NavigationView sender, NavigationViewBackRequestedEventArgs args)