如何确定 UWP 中框架显示的当前页面

问题描述 投票:0回答:1

我对 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
作为输出(也许这就是问题所在?)。有什么帮助吗?

c# windows uwp uwp-xaml
1个回答
0
投票

我还没有找到获取正确名称的函数。

我不确定你提到的

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
  }
© www.soinside.com 2019 - 2024. All rights reserved.