在上一个任务中添加的事件处理程序向设置窗格添加了一个About命令。下一个步骤是为显示About命令添加一个关于页面。为创建该页面,我们需要在项目中添加一个新的用户控件。
1、在解决方案管理器中右键单击项目并使用Add - New Item命令在项目中添加一个用户控件。将文件命名为AboutUserControl.xaml,如图1所示。
目前,首选项页面中的“Remember where I was(记住我的位置)”切换开关未与任何事物关联,并且不能记住状态。让我们通过在切换开关每次被点击时使用漫游设置保存它的状态,同时在首选项页面每次显示时对它进行初始化来修复此问题。
1、打开PreferencesUserControl.xaml并向ToggleSwitch控件添加Toggled属性。
// 从漫游设置初始化切换开关
if (ApplicationData.Current.RoamingSettings.Values.ContainsKey("Remember"))
Remember.IsOn = (bool)ApplicationData.Current.RoamingSettings.Values["Remember"];
注意:为处理保存和恢复设置和其他应用程序数据的任务,Windows运行时为您提供了Windows.Storage.ApplicationData类。ApplicationData允许您在本地、云(漫游存储)或临时存储存储数据。您保存的数据通过名称为LocalSettings 和RoamingSettings 的ApplicationData属性以名称-值对的形式存储。或者它可以存储在特殊的应用程序特定的文件夹中,这些文件夹可以通过ApplicationData的LocalFolder,RoamingFolder和TemporaryFolder属性来访问。
在漫游存储库中保留数据的优势是数据将跟随用户从一个设备转到另一个设备。此外,如果应用程序将数据写入RoamingSettings或RoamingFolder并且用户未以Microsoft账户登录或没有Internet连接,Windows运行时将自动在本地保留数据。因此将RoamingSettings或RoamingFolder作为用户首选项的存储可以带来很多方便。唯一需要提醒的是该平台对漫游存储中可以保存的数据大小进行了限制。在Windows 8预发布版中,您可以漫游大约100K字节的数据。在运行时,您可以从ApplicationData.RoamingStorageQuota属性获取配额的数量。
5、按F5运行应用程序。
6、显示超级按钮并选择设置超级按钮。
7、从设置窗格选择Preferences命令。
8、点击Remember where I was以启用切换开关。
9、取消设置窗格。
10、返回Visual Studio并停止调试。
11、按F5以再次启动应用程序。
12、转至首选项页面并确认切换开关被启用。
13、返回Visual Studio并停止调试。
练习3: 实现首选项
目前Contoso Cookbook每次启动时显示开始页面。在之前练习中添加名称为“Remember where I was”的用户首选项的目的是允许用户配置应用程序如何返回,即每次启动时转至上一次关闭时显示的页面。该用户首选项仅仅需要对代码进行细微的修改,因为Visual Studio已经在应用程序中包含当应用程序被挂起时保存导航状态的代码。
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
// Restore the saved session state only when appropriate
await SuspensionManager.RestoreAsync();
}
所有这些工作的结果是您可以免费获得很多东西。如果Contoso Cookbook被挂起并终止,当重新启动时,它将自动转至您查看的最后页面。您可以通过在Visual Studio中按F5启动应用程序,选择某个食谱,并选择从Debug Location工具栏选择Suspend and shutdown以对它进行测试。
Visual Studio已经包含当应用程序被挂起时保存导航状态以及如果被终止恢复状态的代码。我们将使用类似的策略以在应用程序被用户关闭后再次被启动且Remember where I was被启用时恢复导航状态。
1、打开App.xaml.cs并在靠近顶部处添加以下using语句。
C#
using Windows.Storage;
2、找到OnLaunched方法。紧靠await RecipeDataSource.LoadLocalDataAsync()语句后,添加以下语句。
C#
// If the app was closed by the user the last time it ran, and if "Remember
// "where I was" is enabled, restore the navigation state
if (args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)
{
if (ApplicationData.Current.RoamingSettings.Values.ContainsKey("Remember"))
{
bool remember = (bool)ApplicationData.Current.RoamingSettings.Values["Remember"];
if (remember)
await SuspensionManager.RestoreAsync();
}
}