导航到其他框架(UWP)时如何更改选定的导航视图项?
How to change selected navigation view item when navigating to other frames(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>
如您所见,另外两帧是ChannelsPage
和PlayerPage
。我在 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));
}
虽然页面导航正确,但NavigationView.MenuItem
中的SelectedItem
仍然是Channels
,如何在函数中将其更改为Player
?
解释图片在这里:explanation image
如您所见,框架实际上是 PlayerPage
而 SelectedItem
是 ChannelsPage
。
您可以创建一个 public
方法来设置 NavigationView
的 SelectedItem
。
在MainPage.xaml.cs
中:
public void SetSelectedNavigationItem(int index)
{
MyNavigationView.SelectedItem = MyNavigationView.MenuItems[index];
}
导航到 PlayerPage
后,您可以执行以下操作:
Frame appFrame = Window.Current.Content as Frame;
MainPage mainPage = appFrame.Content as MainPage;
mainPage.SetSelectedNavigationItem( 1 );
当然最好能更简单地访问主页,比如在MainPage
上创建一个static
方法:
public static MainPage GetCurrent()
{
Frame appFrame = Window.Current.Content as Frame;
return appFrame.Content as MainPage;
}
另一个改进是创建一个枚举来替换 "magical" 索引整数。
我有一个 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>
如您所见,另外两帧是ChannelsPage
和PlayerPage
。我在 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));
}
虽然页面导航正确,但NavigationView.MenuItem
中的SelectedItem
仍然是Channels
,如何在函数中将其更改为Player
?
解释图片在这里:explanation image
如您所见,框架实际上是 PlayerPage
而 SelectedItem
是 ChannelsPage
。
您可以创建一个 public
方法来设置 NavigationView
的 SelectedItem
。
在MainPage.xaml.cs
中:
public void SetSelectedNavigationItem(int index)
{
MyNavigationView.SelectedItem = MyNavigationView.MenuItems[index];
}
导航到 PlayerPage
后,您可以执行以下操作:
Frame appFrame = Window.Current.Content as Frame;
MainPage mainPage = appFrame.Content as MainPage;
mainPage.SetSelectedNavigationItem( 1 );
当然最好能更简单地访问主页,比如在MainPage
上创建一个static
方法:
public static MainPage GetCurrent()
{
Frame appFrame = Window.Current.Content as Frame;
return appFrame.Content as MainPage;
}
另一个改进是创建一个枚举来替换 "magical" 索引整数。