NavigationView使用后退按钮更改所选项目

时间:2018-12-13 23:55:26

标签: c# .net uwp

我在UWP应用程序中使用Navigationview控件,问题是当我单击后退按钮时,焦点元素不会更改为显示在内容框中的项目。例如,单击的元素是camara,store,musica,然后单击两次后退按钮以在contentframe元素中显示camara,但是musica仍然具有焦点(蓝色矩形)

private void FrameNavigated( object sender, NavigationEventArgs e )
    {
        var currentView = SystemNavigationManager.GetForCurrentView();
        if ( ContentFrame.CanGoBack )
        {
            currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
        }
        else
        {
            currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
        }
    }

private void OnBackRequested( object sender, BackRequestedEventArgs e )
    {
        if ( ContentFrame.CanGoBack )
        {
            e.Handled = true;

            PageStackEntry pageStackEntry = ContentFrame.BackStack.LastOrDefault();

            ContentFrame.GoBack();

            if ( pageStackEntry != null )
            {
                string nombre = pageStackEntry.SourcePageType.Name;
                MenuItem item = subItemsMenu.FirstOrDefault(nom => nom.NombrePantalla.Equals(nombre));

                navView.SelectedItem = item;
                navView.Header = item.Encabezado;
            }
        }
    }

enter image description here

2 个答案:

答案 0 :(得分:3)

已解决,使用 NavigationViewExtensions.SetSelectedIndex(NavigationView,index);从Microsoft.Toolkit.Uwp.UI.Extensions 4.0.0开始,因为不建议使用5.0.0版本

答案 1 :(得分:0)

我在您的代码中没有发现任何问题。几种方法可能有助于解决问题:

  1. 调试并确保MenuItem项不为空。

  2. 单击后退按钮时,请尝试直接通过您的代码选择房屋或摄像机

    私有无效OnBackRequested(对象发送者,BackRequestedEventArgs e) {   字符串nombre =“ Camera”;   MenuItem item = subItemsMenu.FirstOrDefault(nom => nom.NombrePantalla.Equals(nombre));   navView.SelectedItem =项目; }

  3. 将SelectionChanged =“ nav_SelectionChanged”添加到XAML,然后选中SelectionChanged

  4. 发布一个简单的应用程序,可以解决您的问题