导航到其他框架 (UWP) 时如何更改选定的导航视图项?

Zix*_*uan 2 navigationview uwp

我有一个 UWP,它MainPage是一个NavigationView.

<NavigationView x:Name="MyNavigationView"
                ItemInvoked="MyNavigationView_OnItemInvoked"
                >

    <NavigationView.MenuItems>
        <NavigationViewItem Icon="List" Content="Channels" Tag="channels"/>
        <NavigationViewItem Icon="Video" Content="Player" Tag="player"/>
    </NavigationView.MenuItems>

    <Frame x:Name="MyFrame">
        <Frame.ContentTransitions>
            <TransitionCollection>
                <NavigationThemeTransition/>
            </TransitionCollection>
        </Frame.ContentTransitions>
    </Frame>

</NavigationView>
Run Code Online (Sandbox Code Playgroud)

如您所见,另外两个框架是ChannelsPagePlayerPage。我在 中列出了一些频道ChannelsPage,通过单击一个项目,框架将导航到PlayerPage

private void EachTvProgram_Click(object sender, ItemClickEventArgs e)
    {
        var nextPlaying = (TvProgram) e.ClickedItem;
        TvProgramManager.PlayingProgram = nextPlaying.Title;

        ChannelDetails.IsPaneOpen = false;
        Frame.Navigate(typeof(PlayerPage));
    }
Run Code Online (Sandbox Code Playgroud)

尽管页面导航正确,但SelectedIteminNavigationView.MenuItem仍然是Channels,我如何将其更改为Playerin 函数?

这里的说明图:说明图

如您所见,框架实际上是PlayerPageSelectedItemChannelsPage

Mar*_*und 5

您可以创建一个public用于设置方法SelectedItemNavigationView

MainPage.xaml.cs

public void SetSelectedNavigationItem(int index)
{
    MyNavigationView.SelectedItem = MyNavigationView.MenuItems[index];
}
Run Code Online (Sandbox Code Playgroud)

现在,导航到 后,PlayerPage您可以执行以下操作:

Frame appFrame = Window.Current.Content as Frame;
MainPage mainPage = appFrame.Content as MainPage;
mainPage.SetSelectedNavigationItem( 1 );
Run Code Online (Sandbox Code Playgroud)

当然,最好能更简单地访问主页,例如static在 上创建方法MainPage

public static MainPage GetCurrent()
{
    Frame appFrame = Window.Current.Content as Frame;
    return appFrame.Content as MainPage;
}
Run Code Online (Sandbox Code Playgroud)

另一个改进是创建一个枚举来替换“神奇的”索引整数。