【问题标题】:Instancing Frame class实例化框架类
【发布时间】:2015-10-02 09:05:36
【问题描述】:

我正在编写 C#/XAML/UWP 应用程序,我想知道帧控制的实例化 (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.frame)。我不使用缓存,只是标准场景,其中每个导航创建请求的特定 Page 子类的新实例,并处理前一个页面实例。每个 Page 实例都有 Frame 成员,通过以下方式导航到另一个页面:

this.Frame.Navigate(typeof(RequestedPage));

我可以假设,对于每个页面 this.Frame 都是与“全局变量” Window.Current.Content 相同的对象吗?在什么情况下这个假设不成立?

【问题讨论】:

  • 我相信您的假设是正确的,除非您自己手动更改,否则它不应更改。
  • Windows.Current.Content 甚至不必是框架。例如,它可以是一个 SplitView,SplitView 可以容纳一个 Frame。此外,您甚至可以在堆栈中拥有多个具有自己类型的逻辑和页面的框架。所以,如果你只是使用默认的、开箱即用的设置,它应该是一样的。如果没有,你必须小心。
  • 查看Microsoft git samples 中的 Cortana 语音命令示例。它包含您感兴趣的 NavigationService 和 NavigationHelper

标签: win-universal-app uwp


【解决方案1】:

Frame是一个支持页面导航的内容控件。

Page 是一个 UserControl,this.Frame 指示页面实例包含在哪个框架中。

您可以将任何 UI 元素(例如文本块)分配给 Windows.Current.Content 属性,以使 UI 元素显示在当前窗口上。

默认情况下,应用会为 Window.Current.Content 分配一个 rootFrame 实例。所以它不是一个“全局变量”。

关于Frame的缓存,可以查看文档NavigationCacheMode enumeration

【讨论】:

  • 我所说的“全局变量”是指 Window.Current.Content 在应用程序的整个范围内都可用。
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多