NavigationView 中的项目选择
Item selection in NavigationView
在 NavigationView 中,我有 3 个项目。如果用户单击第二个按钮,我想清除表单并重定向(例如 MainFrame.Navigate(typeof(BlankPage1));)到第一个项目。重定向工作正常,但 NavigationViewItem 的选择保留在第二个 NavigationViewItem 上。
相同代码:
nvTopLevelNav.SelectedItem = nvTopLevelNav.MenuItems[index];
(nvTopLevelNav.SelectedItem as NavigationViewItem).IsSelected = true;
没有帮助。有什么办法可以改变选择吗?
顺便说一句,如果我使用 MainPage (MainFrame.Navigate(typeof(MainPage));) 进行导航,我将获得正确选择的第二个菜单。对我来说,看起来对象没有正确刷新。你能解释一下吗?
您可以尝试使用NavigationView's Tapped
event to change its SelectedItem。见以下代码。
Xaml:
<NavigationView x:Name="nvTopLevelNav" Tapped="nvTopLevelNav_Tapped" .../>
隐藏代码:
private void nvTopLevelNav_Tapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine(nvTopLevelNav.SelectedItem);
NavigationViewItem ItemContent = nvTopLevelNav.SelectedItem as NavigationViewItem;
if (ItemContent != null)
{
switch (ItemContent.Tag)
{
case "Nav_BlankPage1":
MainFrame.Navigate(typeof(BlankPage1));
break;
case "Nav_BlankPage2":
MainFrame.Navigate(typeof(BlankPage1));
MyItem = nvTopLevelNav.MenuItems.ElementAt(0) as NavigationViewItem;
nvTopLevelNav.SelectedItem = MyItem;
break;
case "Nav_BlankPage3":
MainFrame.Navigate(typeof(BlankPage3));
break;
case "Nav_Settings":
break;
}
}
}
使用 Dispatcher
设置 SelectedItem
对我有用:
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
MainNavigationView.SelectedItem = MenuItem_Home;
});
RunAsync
方法用于在UI线程上执行代码,但也可以从UI线程调用。
在 NavigationView 中,我有 3 个项目。如果用户单击第二个按钮,我想清除表单并重定向(例如 MainFrame.Navigate(typeof(BlankPage1));)到第一个项目。重定向工作正常,但 NavigationViewItem 的选择保留在第二个 NavigationViewItem 上。 相同代码:
nvTopLevelNav.SelectedItem = nvTopLevelNav.MenuItems[index];
(nvTopLevelNav.SelectedItem as NavigationViewItem).IsSelected = true;
没有帮助。有什么办法可以改变选择吗?
顺便说一句,如果我使用 MainPage (MainFrame.Navigate(typeof(MainPage));) 进行导航,我将获得正确选择的第二个菜单。对我来说,看起来对象没有正确刷新。你能解释一下吗?
您可以尝试使用NavigationView's Tapped
event to change its SelectedItem。见以下代码。
Xaml:
<NavigationView x:Name="nvTopLevelNav" Tapped="nvTopLevelNav_Tapped" .../>
隐藏代码:
private void nvTopLevelNav_Tapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine(nvTopLevelNav.SelectedItem);
NavigationViewItem ItemContent = nvTopLevelNav.SelectedItem as NavigationViewItem;
if (ItemContent != null)
{
switch (ItemContent.Tag)
{
case "Nav_BlankPage1":
MainFrame.Navigate(typeof(BlankPage1));
break;
case "Nav_BlankPage2":
MainFrame.Navigate(typeof(BlankPage1));
MyItem = nvTopLevelNav.MenuItems.ElementAt(0) as NavigationViewItem;
nvTopLevelNav.SelectedItem = MyItem;
break;
case "Nav_BlankPage3":
MainFrame.Navigate(typeof(BlankPage3));
break;
case "Nav_Settings":
break;
}
}
}
使用 Dispatcher
设置 SelectedItem
对我有用:
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
MainNavigationView.SelectedItem = MenuItem_Home;
});
RunAsync
方法用于在UI线程上执行代码,但也可以从UI线程调用。