c# - 如何更改 Windows 10 UWP 应用中根框架导航的页面名称?

标签 c# xaml uwp azure-application-insights

我有一个 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/

相关文章:

c# - "Property elements cannot be in the middle of an element' s 内容。”WPF 应用程序中的错误

c# - 检查一个 IList 改变了吗?

c# - Task.Wait 与 Task.RunSyncronously 其中任务调用了 WPF Dispatcher.Invoke

c# - 将 GroupBox 中的所有控件设置为只读?

c# - 使用移动应用程序后端在 UWP 中注销

powershell - UWP应用的安装失败,错误为0x80070005:添加磁贴失败,出现意外错误

windows - 转换后的 UWP 应用程序无法在 Xbox One 上运行

c# - 常见来源和目的地列表

c# - 如何在 xaml 和 resx 中使用 GNU gettext

尝试绑定(bind) Windows 10 CalendarDatePicker 的日期时出现 XamlParseException