我有一个 App.xaml
文件,它将根视觉对象设置为一个 Frame
,然后立即导航到名为 Shell.xaml
的页面>。在 Shell.xaml
中,我实现了一个汉堡包菜单,并在主应用程序的导航位置有另一个 Frame
控件。
我正在使用 Application Insights 跟踪应用程序中的遥测数据。我在 Shell.xaml
中嵌套的 Frame
上连接了 Navigated
事件,并在其中添加了一个 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 时,我得到一个很好的已浏览页面列表:
- 很棒的景色
- 另一个酷 View
- 我的观点
- application:MyRootNamespacePrefix.Shell
叫我 OCD,但我在嵌套 shell 中的优雅实现产生了非常漂亮和干净的页面名称,这些名称仅对应于 XAML View 的类名称。我省略了所有讨厌的命名空间前缀。但是,到 Shell 的导航不会。
应该注意的是,我没有在应用程序的其他任何地方调用 TrackPageView
,因此我假设 Application Insights 框架代码以某种方式自动神奇地获取它。
我如何更改它,以便我的 Shell 没有讨厌的 application:MyRootNamespacePrefix.
在实际类名的前面?
更新:
Eureka !看来我是对的。如果 Application Insights Framework 恰好是一个框架,则它必须向根视觉对象的 Navigated 事件添加一个 Hook 。我所做的只是将相同的处理程序添加到我添加到嵌套框架的根框架中,它开始显示为“Shell”。不幸的是,application insights 似乎为根视觉对象的 Navigated
事件添加了自己的处理程序,因此当我为“Shell”获得漂亮干净的 PageView 时,我也得到了带有令人讨厌的前缀的那个。
最佳答案
由于您正在执行自己的页面 View 遥测,因此您可能希望删除自动收集它们的初始化程序:
来自 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);
并取出页面浏览量自动收集器?
关于c# - 如何更改 Windows 10 UWP 应用中根框架导航的页面名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33330194/