Образец NavigationView - это простой пример кода для справки.Вам нужно внести некоторые изменения в соответствии с вашими требованиями.
Я просто хочу вернуть пользователя на страницу настроек после изменения языка.Но я всегда возвращаюсь к исходной домашней странице, которую я использую при запуске приложения.
Я использовал код в документе, чтобы сделать пример кода для тестирования.Там два места вызовут ваш вопрос.
Во-первых, в обработчике события NavView_Loaded
он всегда устанавливает домашнюю страницу в качестве выбранного элемента.Но когда вы меняете язык, вы переходите к «MainPage» и заставляете «ContentFrame» переходить к «SettingsPage».В это время сначала будет вызван обработчик события On_Navigated
.Затем будет вызван обработчик события NavView_Loaded
.По этой причине ваше приложение всегда будет возвращаться на домашнюю страницу.
Второе событие, если установлен SelectedItem в NavigationView.Но событие ItemInvoked NavigationView не будет запущено.Итак, на самом деле вы видите не домашнюю страницу, а пустой элемент управления Frame
.Вы можете использовать событие SelectionChanged вместо события ItemInvoked.Событие SelectionChanged будет запущено, когда вы установите новое значение для SelectedItem в NavigationView.Смотрите следующий пример:
private void NavView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
{
if (args.IsSettingsSelected)
{
ContentFrame.Navigate(typeof(SettingsPage));
}
else
{
NavView_Navigate(args.SelectedItem as NavigationViewItem);
}
}
Затем вернемся к исходному вопросу:
Я могу себе представить, установить флаг после первой загрузки страницы, а затем всегда проверять,этот флаг установлен.Но тогда у меня проблема в том, что я все еще мог приземлиться только на странице настроек, потому что мне пришлось бы сделать его еще одним местом назначения для проверки флага.
По моему мнению, флаг не повлияет на васделать другие вещи.Вы можете полностью определить несколько флагов.Пожалуйста, посмотрите мой следующий фрагмент кода для справки:
public static void German()
{
Log.Logger.Information("Language = German")
ApplicationLanguages.PrimaryLanguageOverride = "de-DE";
ApplicationData.Current.LocalSettings.Values["IsSwitchingLanguage"] = true;
DataCollection.Current.LanguageChangedEvent.LanguageChanged();
}
В вашем MainPage.xaml.cs
:
public void ChangedLanguage(object source, EventHandlerBase e)
{
if (e.GetStatus())
{
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
Frame.Navigate(this.GetType());
}
}
В NavView_Loaded
обработчике событий я внес некоторые изменения:
private void NavView_Loaded(object sender, RoutedEventArgs e)
{
......
foreach (NavigationViewItemBase item in NavView.MenuItems)
{
var IsSwitchingLanguage = ApplicationData.Current.LocalSettings.Values["IsSwitchingLanguage"];
if (IsSwitchingLanguage != null)
{
if ((bool)IsSwitchingLanguage)
{
NavView.SelectedItem = NavView.SettingsItem as NavigationViewItem;
ApplicationData.Current.LocalSettings.Values["IsSwitchingLanguage"] = false;
break;
}
}
if (item is NavigationViewItem && item.Tag.ToString() == "home")
{
NavView.SelectedItem = item;
break;
}
}
......
}