如何在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时,我也获得了带有讨厌前缀的页面。
由于您正在进行自己的页面视图遥测,您可能希望删除自动收集它们的初始化器:
从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自动收集器?