转自:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/gg278407(v=vs.105).aspx
适用于: Windows Phone 8 | Windows Phone OS 7.1
Windows Phone 应用程序是由存在于导航堆栈上的页面构成,用户可以使用硬件“返回”按键访问这些页面。如果在应用程序中过度使用页面,则会导致导航堆栈过于繁琐,从而造成许多问题,包括性能和可靠性降低。开发人员必须遵守在应用程序中有效使用页面的导航模型,在实施替代方法时限制页面的使用。本主题提供了为应用程序创建有效页面模型的最佳做法和指导。
Windows Phone 应用程序可以被看作是页面、屏幕的集合或两种元素的组合。下面是“页面”和“屏幕”在 Windows Phone 应用程序的页面模型上下文中的定义:
-
“页面” - 一个用户可识别的持久状态集合。它可视为包含信息、可记忆内容或指向其他页面的链接的页面。
-
“屏幕” - 一个不包含内存内容的常用 UI 屏幕(如,弹出窗口、对话框或初始屏幕)。屏幕不是用户可识别的持久状态集合。
下图说明了一个包含各种页面和屏幕的假设应用结构。
![AP_CoreCon_PageModel AP_CoreCon_PageModel](http://i.msdn.microsoft.com/dynimg/IC619131.png)
从该图中,可以看到应用程序由下列页面组成:
-
主页
-
小组件页面
-
小组件详细信息页面(包含 Pivot)
-
小工具详细信息页面
-
搜索页面
-
设置页面
初始屏幕和登录屏幕不是页面,因为页面的定义要求页面具有用户可识别的持久状态集合。例如,初始屏幕不包含状态。在启动应用程序之前,它仅用作占位符。登录屏幕还包含无状态数据,因为它仅要求输入凭据。当确定 UI 是否是页面时,可以询问下列问题:
-
用户是否明确要访问该页面?
-
用户是否记得他们曾访问过该页面并希望返回到该页面?
初始屏幕和登录屏幕不符合上述标准,因此不将其视为页面。
您将会注意到“小部件详细信息”和“小工具详细信息”上都有环状箭头。对于前面的情况,这表明您可以分别从一个“小部件”或“小工具”转换到另一个“小部件”或“小工具”,而不用转到新的页面。此行为类似于 Microsoft Outlook 应用程序中的行为,用户可以在该应用程序中通过单击箭头在同一窗口中的上一封邮件和下一封邮件之间进行切换。
导航
可将 Windows Phone 中的导航定义为页面间的转换。如带箭头的图形所示,存在多个转换步骤,包括从“主页”到“小部件列表页面”或从“搜索页面”到“小工具详细信息页面”的转换。但是,并非所有转换步骤都会被视为真正的导航。例如,当您从初始屏幕移动到主页,或从登录屏幕到任何其他屏幕进行多个移动时。原因依然是这些屏幕都不是页面。从非页面中移动可称为转换。
您必须通过 Windows Phone 中定义的页面、屏幕和导航概念,尽可能将应用程序构建为在不使用其他页面的情况下处理各种方案。本节提供了使用有效页面模型的最佳做法:
-
屏幕和非导航的转换 - 对于登录屏幕等临时 UI,可以使用 Popup 控件显示部分覆盖屏幕的内容,而无需实施要求完整导航的单独屏幕。您可以在代码中添加 BackKeyPress 事件,并在弹出窗口显示时将 e.Cancel 设置为 true,以使用户能够使用“返回”按键关闭该对话框。
-
多个内容视图 - 对于显示多部分内容的页面,只需将页面上的控件重新绑定到新 DataContext 即可以在不同的内容间转换,而无需使用导航。同时,还可以通过加载页面中 UserControl 的多个实例,或使用任何其他机制显示新内容来重新绑定。您可以选择用户可用来在项目中向前和向后转换的方法。例如,可以考虑使用上一个和下一个“应用程序栏”按键。但是,我们建议您避免过度使用“返回”按键进行本地转换。
-
保存状态和逻辑删除 - 您可以保存给定页面中发生转换的本地历史记录,从而在逻辑删除应用程序时,用户可以重新跟踪其步骤。对于诸如上一个或下一个浏览之类简单情形,只需将页面“状态”保存在当前索引中。通过执行此操作以及使用 NavigationContext API 应提供在从逻辑删除状态返回时遍历数据集所需的所有信息。对于具有较为复杂的本地转换历史记录的应用程序(如任意形式浏览链接项),可以选择将某些历史记录存储在页面状态中,但是您需要对存储的项设置一个合理的限制。对于用户而言,关键是使用硬件“返回”按键,将其返回到以前页面。它们不应该返回到以前查看的项。有关更多信息,请参见 Windows Phone 的启动、恢复和多任务处理。
-
导航后退堆栈 - 后退堆栈中的页面保存在内存中。应用程序应该最大限度地降低后退堆栈中页面上使用的内存,例如释放大图片、缓存数据等。有关更多信息,请参见 Windows Phone 中的框架、页面和导航功能。
-
下表提供了有关可视为页面的应用程序通用部分的信息。
屏幕类型
页面
说明
初始屏幕
否
这是启动体验的瞬态部分,用户无法导航到该处。
全景体验
是
Windows Phone 应用程序的通用主屏幕方法。
详细信息页面
是
此页面通常适用于通过查询字符串参数化的以数据中心的应用。
Pivot 项目
否
数据透视项目是数据透视控件的一个小型组件,用于存放所需的内容。
登录或错误对话框
否
这是由应用程序状态触发的瞬态 UI,用户无法直接导航到该处。
项目枚举
否
用于浏览类似内容(作为就地活动,而非导航方法)。
-
下表概括了您可以用于处理各种类型 UI 实现的方法。
UI 类型
实现
“返回”按键行为
逻辑删除行为
页面
PhoneApplicationPage 控件
“返回”按键会自动返回或退出应用。您不应重写,除非出现数据丢失的情况。
自动保留在后退堆栈中。
屏幕瞬态 UI
弹出窗口或子窗口
应用应重写以便取消弹出窗口。当按下“返回”按键时,屏幕键盘和 MessageBox 控件自动取消。
应用应在导航期间关闭或取消弹出窗口。
项目枚举
UserControl
不可用:在父页中托管。
应用应保存适当的活动项目。