【问题标题】:Item selection in NavigationViewNavigationView 中的项目选择
【发布时间】:2020-03-18 00:53:38
【问题描述】:

在 NavigationView 我有 3 个项目。如果用户单击第二个按钮,我想清理表单并重定向(例如使用 MainFrame.Navigate(typeof(BlankPage1));)到第一个项目。重定向工作正常,但 NavigationViewItem 的选择停留在第二个 NavigationViewItem 上。 相同的代码:

nvTopLevelNav.SelectedItem = nvTopLevelNav.MenuItems[index];
(nvTopLevelNav.SelectedItem as NavigationViewItem).IsSelected = true;

没有帮助。有什么办法可以改变选择吗?

顺便说一句,如果我使用 MainPage (MainFrame.Navigate(typeof(MainPage));) 进行导航,我将获得正确选择的第二个菜单。对我来说,看起来对象没有正确刷新。你能澄清一下吗?

【问题讨论】:

  • 第一行代码应该足以正确设置所选项目。如果MenuItems[index] 是您要设置为选中的项目,它肯定可以工作。您能否发布一些额外的代码(XAML 等)来帮助我们了解正在发生的事情?
  • 我上传了项目link
  • 我已经检查了代码,你实际上在哪里设置SelectedItem?我找不到任何实例。例如,当在 switch - case "Nav_BlankPage2": 内部时,我会在 Navigate 调用之后执行 nvTopLevelNav.SelectedItem = nvTopLevelNav.MenuItems[1];。在这种情况下,您似乎正在导航到BlankPage1,我希望导航到BlankPage2。这对你不起作用?
  • 它不起作用。我的想法是:第一页是主要的,第二个按钮应该像“清理”第一页一样工作,听起来像“新页面”。正如我所提到的,导航工作正常,但菜单保存了单击按钮的选择。有没有办法手动更改 NavigationViewItem 选择?
  • 我描述的是你手动设置的方式,所以我不知道哪里出了问题。当我在我的电脑上时,我会回来查看

标签: uwp navigationview


【解决方案1】:

您可以尝试使用NavigationViewTapped 事件来更改其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;
        }
    }
}

【讨论】:

    【解决方案2】:

    使用Dispatcher 设置SelectedItem 对我有用:

    Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
        MainNavigationView.SelectedItem = MenuItem_Home;
    });
    

    RunAsync 方法用于在 UI 线程上执行代码,但也可以从 UI 线程调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      相关资源
      最近更新 更多