如何在Windows 10 UWP应用程序中更改根框架导航的页面名称?

本文关键字:导航 框架 Windows UWP 应用程序 | 更新日期: 2023-09-27 18:19:13

我有一个App.xaml文件,它将根可视化设置为Frame,然后立即导航到一个名为Shell.xaml的页面。在Shell.xaml中,我实现了一个汉堡包菜单,并有另一个Frame控件,其中主应用程序的导航正在发生。

我正在使用应用程序洞察力来跟踪应用程序内的遥测。我将Navigated事件连接到Shell.xaml内嵌套的Frame上,并在其中添加TrackPageView事件,以便在一个地方跟踪所有页面导航。这真的很好,因为我不需要在每个页面的OnNavigatedTo覆盖中这样做。

下面是OnNavigatedToPage事件的实现:
private void OnNavigatedToPage(object sender, NavigationEventArgs e)
{
    var pageName = e.Content.GetType().Name;
    ViewModelDispatcher.Telemetry.TrackPageView(pageName);
    // After a successful navigation set keyboard focus to the loaded page
    if (e.Content is Page && e.Content != null)
    {
        var control = (Page)e.Content;
        control.Loaded += Page_Loaded;
    }
}

问题是这适用于每个页面,除了用于Shell.xaml的初始导航。

当我查看Application Insights时,我得到了一个不错的页面列表,这些页面已被浏览到:

  • AwesomeView
  • AnotherCoolView
  • MyView
  • 应用程序:MyRootNamespacePrefix。壳牌

叫我OCD,但我在嵌套shell中的优雅实现产生了非常漂亮和干净的页面名,这些页面名与XAML视图的类名相对应。我省略了所有讨厌的名称空间前缀。但是,到Shell的导航不需要。

应该注意的是,我没有在应用程序的其他任何地方调用TrackPageView,所以我假设应用程序洞察框架代码以某种方式自动拾取它。

我如何改变它,使我的Shell没有讨厌的application:MyRootNamespacePrefix.在实际的类名前面?

更新:尤里卡!看来我是对的。如果根视图碰巧是一个Frame,那么Application Insights Framework必须给它的Navigated事件添加一个钩子。我所做的就是将相同的处理程序添加到根框架中,我添加到嵌套框架中,它开始显示为"Shell"。不幸的是,应用程序见解似乎为根可视化的Navigated事件添加了自己的处理程序,因此,当我获得"Shell"的漂亮干净的PageView时,我也获得了带有讨厌前缀的页面。

如何在Windows 10 UWP应用程序中更改根框架导航的页面名称?

由于您正在进行自己的页面视图遥测,您可能希望删除自动收集它们的初始化器:

从https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-get-started/

你可能有这样的东西:

WindowsAppInitializer.InitializeAsync();

,但您想要的可能是显式的,如:

WindowsAppInitializer.InitializeAsync( 
    yourIKey, // not sure if you can leave this null to get the key from config file?
    WindowsCollectors.Metadata
    | WindowsCollectors.PageView // remove this one?
    | WindowsCollectors.Session
    | WindowsCollectors.UnhandledException);

并取出pageview自动收集器?