在页面实例之间保留单组状态

更新:2007 年 11 月

此示例演示如何通过使用 IProvideCustomContentStateCustomContentState,在页面实例之间保留多个页面状态项。

此示例演示 Windows Presentation Foundation 的特定功能,因此未遵循应用程序开发的最佳做法。有关 Windows Presentation Foundation (WPF) 和 Microsoft .NET Framework 应用程序开发的最佳做法的全面介绍,请相应地参考以下主题:

辅助功能 - 辅助功能最佳方案

本地化 - WPF 全球化和本地化概述

性能 - 优化 WPF 应用程序性能

安全 - Windows Presentation Foundation 安全性

Download sample

生成示例

  • 安装 Windows 软件开发工具包 (SDK) 并打开其生成环境命令窗口。在“开始”菜单上,指向“所有程序”、“Microsoft Windows SDK”,然后单击“CMD Shell”。

  • 将示例(通常位于软件开发工具包 (SDK) 文档中)下载到您的硬盘。

  • 若要从生成环境命令窗口生成示例,请转到示例的源目录。在命令提示符处,键入 MSBUILD。

  • 若要在 Microsoft Visual Studio 中生成示例,请加载示例解决方案或项目文件,然后按 Ctrl+Shift+B。

运行示例

  • 若要从生成环境命令窗口运行已编译的示例,请执行示例源代码文件夹下包含的 Bin\Debug 或 Bin\Release 文件夹中的 .exe 文件。

  • 若要在 Visual Studio 中调试运行已编译的示例,请按 F5。

备注

默认情况下,Windows Presentation Foundation (WPF) 不在导航历史记录中存储页面实例。相反,每次导航到一个页面时,都会创建新的页面实例。因此,当再次导航到该页面时,将不会保留有关该页面的第一个实例的任何状态信息。WPF 可以在导航历史记录中保留页面实例(从而隐式保留页面状态),尽管从内存消耗角度来看,这样做的代价会比较高。

但是,通过 WPF 所提供的基础结构,您既可以将状态信息存储到导航历史记录的页面条目中,又可以在导航到相应页面时,使用导航历史记录将该状态信息重新应用到新的页面实例。

此示例演示页面如何实现 IProvideCustomContentState,以便可以保留单组状态(其中可能包含一个或多个项)。在离开某个页面时,WPF 将调用 GetContentState,以询问该页面要保留哪些状态。GetContentState 会返回您创建用来存储和重播状态的 CustomContentState 的一个子集。

当您需要在页面实例之间存储多个页面状态项时,此技术最为有用。若要在页面实例之间保留单个状态项,应该考虑使用可在日志中记录的依赖项属性(请参见在页面实例之间保留单个状态项)。若要保留单个页面实例的多组状态,请参见保留每个页面实例的多组状态

Aa972166.alert_caution(zh-cn,VS.90).gif重要说明:

当您存储自定义内容状态中的信息时,不能存储对正保留其状态的页面实例的任何引用。这可以防止 WPF 释放该页面实例,并使默认导航历史记录行为失效。如果必须这样做,可以考虑改用 KeepAlive

请参见

任务

在页面实例之间保留单组状态

保留每个页面实例的多组状态