动手实验 实验6设置和首选项
2012年9月
简介
实验3介绍了合约并演示了应用程序如何轻松地与共享和搜索合约实现集成。合约同样包含设置超级按钮它对活动的Windows应用商店应用的设置进行修改。在您选择设置超级按钮时出现的设置窗格中操作系统提供一个权限命令它允许用户启用或禁用程序的某些功能例如对网络摄像头和麦克风的访问。值得注意的是您可以向设置窗格添加命令并将它们连接到设置页面。这为用户提供了方便地访问首选项关于框和其他应用程序特定的设置内容。
在本实验中您将向Contoso Cookbook的设置窗格添加About 和 Preferences命令。您将公开一个简单的用户首选项它可以通过一个切换开关被打开和关闭并且您将使用漫游设置存储这个首选项以使它跟随用户一起移动。
目标
本实验将向您展示如何
- 向设置窗格添加About命令和关于页面。
- 向设置窗格添加Preferences首选项命令和首选项页面。
- 使用漫游设置存储用户首选项。
系统要求
您需要下列软件完成本实验
- Microsoft Windows 8
- Microsoft Visual Studio 2012
设置
您必须执行以下步骤来准备本实验的计算机
练习
本动手实验包含以下练习
完成本实验的预计时间30至40分钟。
练习1: 添加关于页面
在本练习中您将向Contoso Cookbook添加一个简单的关于页面。您将使用在实验4中添加的Callisto库中的SettingsFlyout类来处理关于页面。
任务1 – 添加关于命令
第一步是向设置菜单添加一个About命令我们将通过处理SettingsPane.CommandsRequested事件来完成。
1、在Visual Studio中打开您在实验4中完成的ContosoCookbook项目。如果您尚未完成实验4或希望从一个参考副本开始您可以在开始材料中找到实验已完成的版本。
2、打开App.xaml.cs并添加以下using语句。
C#
using Windows.UI.ApplicationSettings;using Callisto.Controls;using Windows.UI;
3、向App类添加以下字段。
C#
private Color _background Color.FromArgb(255, 0, 77, 96);
4、在OnLaunched方法中紧挨着为SuggestionsRequested事件注册事件处理程序的语句之后添加以下语句。
C#
// 在设置窗格为CommandsRequested 事件注册事件处理程序SettingsPane.GetForCurrentView().CommandsRequested OnCommandsRequested;
5、向OnSearchActivated方法添加相同的语句再次紧挨着为SuggestionsRequested事件注册事件处理程序的语句之后以保证即使应用程序从Windows 8搜索窗格被激活CommandsRequested事件也会被处理。
6、向App.xaml.cs添加以下事件处理程序。
C#
void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args){// 添加关于命令var about new SettingsCommand("about", "About", (handler) >{var settings new SettingsFlyout();settings.Content new AboutUserControl();settings.HeaderBrush new SolidColorBrush(_background);settings.Background new SolidColorBrush(_background);settings.HeaderText "About";settings.IsOpen true;});args.Request.ApplicationCommands.Add(about);}
注意这里您通过向传递给CommandsRequested事件的ApplicationCommands集合添加一个SettingsCommand对象以向设置菜单添加命令。SettingsCommand构造函数的第三个参数是命令被调用时被调用的处理程序。在本示例中您使用Callisto中的SettingsFlyout类从处理程序显示关于页面。当然关于页面还没有被创建。您将在下一个任务中创建它。
任务 2 – 添加关于页面
在上一个任务中添加的事件处理程序向设置窗格添加了一个About命令。下一个步骤是为显示About命令添加一个关于页面。为创建该页面我们需要在项目中添加一个新的用户控件。
1、在解决方案管理器中右键单击项目并使用Add - New Item命令在项目中添加一个用户控件。将文件命名为AboutUserControl.xaml如图1所示。
图1 添加一个代表关于页面的用户控件
2、在AboutUserControl.xaml中向空的Grid添加以下语句。
XAML
注意现在关于页面通知用户这是Contoso Cookbook的试用版本。在实验8中您将使用Windows运行时中的应用商店API模拟应用程序的购买当购买发生后您将用许可信息替换“试用版本”。
任务 3 – 测试结果
现在让我们测试您的修改并查看关于页面的外观。
1、按F5运行应用程序。
2、显示超级按钮并选择设置。
3、从设置窗格选择About命令。
4、确认出现开始页面如图2所示。
图 2 Contoso Cookbook的关于页面
5、返回Visual Studio并停止调试。
练习 2: 添加首选项页面
现在您已经理解向设置窗格添加页面的机制这次您将添加另一个页面首选项页面。它允许用户输入并编辑首选项。我们只添加一个首选项来演示实现的方法当然您可以添加任意数量的首选项。您添加的首选项将允许用户配置Contoso Cookbook启动时返回最后一次显示的食谱或食谱组。
任务 1 – 添加首选项命令
修改您在之前练习中编写的CommandsRequested事件处理程序并添加Preferences命令。
1、打开App.xaml.cs并找到OnCommandsRequested方法。
2、在添加About命令的语句后向OnCommandsRequested添加以下语句。
C#
// 添加一个首选项命令var preferences new SettingsCommand("preferences", "Preferences", (handler) >{var settings new SettingsFlyout();settings.Content new PreferencesUserControl();settings.HeaderBrush new SolidColorBrush(_background);settings.Background new SolidColorBrush(_background);settings.HeaderText "Preferences";settings.IsOpen true;});args.Request.ApplicationCommands.Add(preferences);
任务2 – 添加首选项页面
下一个任务是创建Preferences命令调用的页面。
1、在解决方案管理器中右键单击项目并使用Add > New Item命令在项目中添加一个新的用户控件。将文件命名为PreferencesUserControl.xaml。
2、在PreferencesUserControl.xaml中向空的Grid元素添加以下语句。
XAML
3、按F5运行应用程序。
4、显示超级按钮并选择设置超级按钮。
5、从设置窗格选择Preferences命令。
6、确认出现首选项页面并且包含一个切换开关如图3所示。
图3 Contoso Cookbook的首选项页面
7、返回Visual Studio并停止调试。
任务3 – 记住首选项的状态
目前首选项页面中的“Remember where I was记住我的位置”切换开关未与任何事物关联并且不能记住状态。让我们通过在切换开关每次被点击时使用漫游设置保存它的状态同时在首选项页面每次显示时对它进行初始化来修复此问题。
1、打开PreferencesUserControl.xaml并向ToggleSwitch控件添加Toggled属性。
XAML
2、打开PreferencesUserControl.xaml.cs并添加以下using语句。
C#
using Windows.Storage;
3、然后添加以下方法。
C#
private void OnToggled(object sender, RoutedEventArgs e){ApplicationData.Current.RoamingSettings.Values["Remember"] Remember.IsOn;}
4、向PreferencesUserControl的构造函数对InitializeComponent的调用之后添加以下语句以在每次首选项页面显示时初始化切换开关。
C#
// 从漫游设置初始化切换开关if (ApplicationData.Current.RoamingSettings.Values.ContainsKey("Remember"))Remember.IsOn (bool)ApplicationData.Current.RoamingSettings.Values["Remember"];
注意为处理保存和恢复设置和其他应用程序数据的任务Windows运行时为您提供了Windows.Storage.ApplicationData类。ApplicationData允许您在本地、云漫游存储或临时存储存储数据。您保存的数据通过名称为LocalSettings 和RoamingSettings 的ApplicationData属性以名称-值对的形式存储。或者它可以存储在特殊的应用程序特定的文件夹中这些文件夹可以通过ApplicationData的LocalFolderRoamingFolder和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已经在应用程序中包含当应用程序被挂起时保存导航状态的代码。
注意进程生命周期管理是Windows应用商店应用的重要元素。当应用程序被挂起时它可以在任何时候被操作系统终止。并且当应用程序被终止后它的状态也将丢失。
用户不会因为暂时切换应用程序而去关心应用程序会丢失状态。这就是为什么Windows.UI.Xaml.Application类定义Suspending事件的原因。在应用被挂起前Suspending事件被触发。它为应用程序提供了保存状态的机会以防止应用程序被操作系统终止并在之后被用户重新激活。触发事件的目的是当用户重新激活应用程序时能够恢复状态以产生应用程序根本没有被终止的错觉。
Visual Studio在应用程序中包含一个名称为SuspensionManager的类。它位于项目Common文件夹的SuspensionManager.cs中。Visual Studio同时在App.xaml.cs的App构造函数中包含一行代码它为Suspending事件注册了一个处理程序。该处理程序(OnSuspending)调用SuspensionManager.SaveAsync以保存应用程序的导航状态。导航状态包含用户查看的项或组以及用户到达上述项或组的路径。
private async void OnSuspending(object sender, SuspendingEventArgs e){var deferral e.SuspendingOperation.GetDeferral();await SuspensionManager.SaveAsync();deferral.Complete();}
此外Visual Studio在App.xaml.cs的OnLaunched方法中包含一个if子句它负责当应用程序被挂起后又被操作系统终止时恢复应用程序的导航状态
if (args.PreviousExecutionState ApplicationExecutionState.Terminated){// Restore the saved session state only when appropriateawait SuspensionManager.RestoreAsync();}
所有这些工作的结果是您可以免费获得很多东西。如果Contoso Cookbook被挂起并终止当重新启动时它将自动转至您查看的最后页面。您可以通过在Visual Studio中按F5启动应用程序选择某个食谱并选择从Debug Location工具栏选择Suspend and shutdown以对它进行测试。
通过这种方式关闭应用程序后按F5重新启动应用程序。上述步骤对应用程序被操作系统终止并被重新启动的过程进行了模拟。得益于Visual Studio的帮助应用程序将返回至您关闭应用时查看的食谱。因为最近的应用程序历史也同时被恢复您甚至可以使用后退按钮回溯在应用程序中的浏览步骤。
任务 1 –修改OnLaunched方法
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 stateif (args.PreviousExecutionState ApplicationExecutionState.ClosedByUser){if (ApplicationData.Current.RoamingSettings.Values.ContainsKey("Remember")){bool remember (bool)ApplicationData.Current.RoamingSettings.Values["Remember"];if (remember)await SuspensionManager.RestoreAsync();}}
注意当应用程序被用户关闭时我们不需要编写任何保存导航状态的代码因为Suspending事件将在关闭应用程序几秒钟后触发。事实上并没有指示应用程序被用户关闭的事件。当您希望在应用程序关闭前保存状态Suspending事件处理程序是完成上述工作的恰当位置。
任务 2 –测试结果
所有剩下的工作是进行一些测试以确认这些修改能够正常工作。
1、按F5运行应用程序。
2、显示超级按钮并选择设置超级按钮。
3、从设置窗格选择Preferences命令。
4、验证Remember where I was被启用。如果未被启用则启用它。
5、取消设置窗格。
6、转至食谱页面。
7、通过从屏幕顶部向下轻扫或按AltF4以关闭应用程序。(不要使用Visual Studio中的Stop Debugging命令关闭应用程序)
8、返回Visual Studio并等待几秒钟以使进程结束。(通常需要花10秒钟。)
9、按F5再次运行应用程序。
10、确认Contoso Cookbook返回当您关闭应用程序时显示的食谱。
11、转至首选项页面并关闭Remember where I was。
12、当查看食谱页面时通过从屏幕顶部向下轻扫或按AltF4以再次关闭应用程序。
13、返回Visual Studio并等待进程结束。
14、按F5再次运行应用程序。
15、确认您转至应用程序的开始页面而不是您最后查看的食谱页面。
16、返回Visual Studio并停止调试。
总结
设置和首选项是几乎每个Windows应用商店应用的重要组成部分。设置超级按钮为查看和编辑应用程序设置提供了一个熟悉和一致的模型并且正如您在本实验中看到的那样通过设置窗格公开应用程序的内容十分简单。Callisto库为通过SettingsFlyout控件呈现设置页面提供了方便并且页面本身可以很方便地通过用户控件实现。
从实验1到现在我们已经走过了很长一段路但是还有更多的工作需要完成。接下来是成为明星Windows应用商店应用的另一个重要步骤磁贴和通知。
转:https://www.cnblogs.com/zigzagPath/p/3154159.html