我对 UWP 开发还很陌生,到目前为止,我按照下面的教程制作了一个程序,该程序使用 NavigationView 进行选择并使用 Frame 加载页面来浏览页面。但我想解决一个小问题:当我返回页面时,NavigationView 上选定的页面不会更新。
我只是想要一种方法来确定框架显示的当前页面,以选择导航视图中的相应页面,这将通过后退按钮触发。
我返回页面的代码目前是这样的:
private void NavView_BackRequested(NavigationView sender, NavigationViewBackRequestedEventArgs args)
{
if (ViewFrame.CanGoBack)
ViewFrame.GoBack();
}
我想做的是:
private void NavView_BackRequested(NavigationView sender, NavigationViewBackRequestedEventArgs args)
{
if (ViewFrame.CanGoBack)
ViewFrame.GoBack();
var currentFrameName = Frame.getCurrentPage // gets the current page name
// iterates thru NavigationMenu items until the same as displayed is found
foreach(NavigationViewItemBase item in NavView.MenuItems)
{
if (item is NavigationViewItem && item.Tag.ToString() == currentFrameName.toString())
{
NavView.SelectedItem = item;
break;
}
}
}
因为导航菜单项与页面具有相同的标签名称。
我还没有找到一个函数来获取正确的名称。到目前为止,我使用的仅显示框架插入的当前页面(MainPage),例如
Frame.CurrentSourcePageType.ToString()
和Frame.Content.ToString()
。我使用 Debug.WriteLine()
命名空间中的 System.Diagnostics
作为输出(也许这就是问题所在?)。有什么帮助吗?
我还没有找到获取正确名称的函数。
我不确定你提到的
name
是Page
的类型还是Page
的名称。
如果您正在尝试获取当前页面的类型。您可以使用
Page.GetType()
来获取类型。像这样:
var page = MyFrame.Content as Page;
var type = page.GetType();
if (type.Name.Equals("BlankPage1"))
{
// do what you want.
}
如果您尝试输入框架当前
Page
的名称。您可以尝试@Rayomnd Chen的建议,首先为页面分配一个名称。
Xaml:
<Page
x:Class="TestGetPage.BlankPage1"
.....
x:Name="MyBlankPage"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
代码:
var page = MyFrame.Content as Page;
if (page.Name.Equals("MyBlankPage"))
{
// do what you want
}