快速构建Windows 8风格应用16-SettingContract原理及构建
原文:快速构建Windows 8风格应用16-SettingContract原理及构建
本篇博文主要介绍Setting Contract概述、Setting Contract实现基本原理、如何构建Setting Contract、构建Setting Contract最佳实践。
Setting Contract概述
1) Setting Contract在当前的应用中提供了快速、上下文相关的沉浸式的设置访问体验;
2) Setting Contract始终是可用的;
3) 设置包括始终可用的系统设置、让用户可以控制应用对系统设备和功能的访问的系统代理设置、以及当前应用程序指定的设置;
我们可以从屏幕右边缘轻扫划出超级按钮,选择“设置”显示设置窗口。设置窗口中既包括应用设置又包括系统设置。

对于开发者,可以通过SettingCommand提供设备面板中入口点,并且这些入口点显示在设置窗口的顶端,其中“权限”和“评论和打分”[注意:只有通过Windows应用商店审核后的应用程序才有该入口点]两个入口点由系统提供。设置面板底端包括由系统提供的电脑设置[音量、亮度、电源等信息]。
Setting Contract实现基本原理

1) 注册设置面板中CommandsRequested事件;
2) 在相关设置事件的回调函数中指定SettingsCommand命令;
3) 最后将SettingsCommand命令添加到ApplicationCommands中,使该命令在设置面板中生效;
如何构建Setting Contract
上面刚刚提到实现Setting Contract的基本原理,那我们如何在应用程序中实现Setting Contract呢?
第一步:
注册CommandsRequested事件。

第二步:
在onCommadsReqested回调函数中添加SettingsCommand命令,其中SettingsCommand类中构造函数包含三个参数。

三个参数分别为settingsCommandId[设置命令的Id,该参数为object类型]、label[控制面板中入口点显示信息]、handler[触发该入口点时执行的操作,该参数类型为UICommandInvokedHandler]。
回调函数中:

我们声明SettingsCommand对象设置handler参数时,可以使用Lambda表达式方式处理该入口点击时触发的操作,也可以声明UICommandInvokedHandler对象进行设置handler参数。
其中UICommandInvokedHandler委托对象中需要传递一个类型为IUICommand的参数。

代码可如下:

注意:我们也可以在设置面板中某一入口点中点击处理代码中声明SettingsFlyout对象,并且在该对象中添加自定义控件,用于在控制面板中显示。
代码可如下:

我们可以设置SettingsFlyout对象的Content、HeaderBrush、HeaderText等属性,其中AboutUserControl为用户自定义控件。
我们可以通过右键选中应用程序解决方案=>添加=>添加新项,在弹出面板中找到用户控件并添加。

然后我们可以设置自定义控件的显示的样式和信息。代码可如下:

第三步:
将SettingsCommand命令添加到ApplicationCommands中,使该入口点在设置面板中生效。

完成这三个步骤之后,我们可以运行自己应用程序看一下设置面板中有什么变化。运行效果:

我们可以看到自己添加的两个入口点已经显示在设置面板中了。点击某一入口点执行预先设置好的操作。

上图中显示的就是自定义控件中设置的内容。
构建Setting Contract最佳实践
1) 在Setting Contract中设置应用的相关特性;
2) Setting Contract中不要包含任务流程;
3) 添加的设置项不要超过四项;
4) 将很少使用的设置项进行整合;
5) 为常用的设置项提供入口;
6) 设置的层级不要超过两极;
7) 当用户改变了设置后,应用将立即作出反映;
8) 为同种类型的设置提供相同的设置体验;
9) 每个设置项应有一个简洁易懂的说明;
10)不要使用设置导航到应用的其他部分;
11)设置面板中推荐使用的控件有:ToggleSwitch、Button、HyperlinkButton、TextBox、RadioButton和CheckBox;
更多关于Setting Contract使用建议可参考:应用设置指南(Metro风格应用)。
快速构建Windows 8风格应用16-SettingContract原理及构建的更多相关文章
- 快速构建Windows 8风格应用36-商店应用发布流程
原文:快速构建Windows 8风格应用36-商店应用发布流程 引言 在发布应用之前,我们需要注册开发者账号才能够发布应用.我们可以登录https://appdev.microsoft.com/Sto ...
- 快速构建Windows 8风格应用32-构建辅助磁贴
原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕 ...
- 快速构建Windows 8风格应用17-布局控件
原文:快速构建Windows 8风格应用17-布局控件 本篇博文主要介绍三种常用的布局控件:Canvas.Grid.StackPanel. Panel类是开发Windows 8 Store应用中一个重 ...
- 快速构建Windows 8风格应用15-ShareContract构建
原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 Da ...
- 快速构建Windows 8风格应用14-ShareContract概述及原理
原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...
- 快速构建Windows 8风格应用13-SearchContract构建
原文:快速构建Windows 8风格应用13-SearchContract构建 本篇博文主要介绍如何在应用中构建SearchContract,相应的原理已经在博文<快速构建Windows 8风格 ...
- 快速构建Windows 8风格应用9-竖直视图
原文:快速构建Windows 8风格应用9-竖直视图 本篇博文主要介绍竖直视图概览.关于竖直视图设计.如何构建竖直视图 竖直视图概览 Windows 8为了支持旋转的设备提供了竖屏视图,我们开发的应用 ...
- 快速构建Windows 8风格应用10-设备方向
原文:快速构建Windows 8风格应用10-设备方向 本篇博文主要介绍常用支持Windows 8操作系统设备的方向.如何获取当前设备方向.DisplayProperties类. 常用支持Window ...
- 快速构建Windows 8风格应用11-语义缩放
原文:快速构建Windows 8风格应用11-语义缩放 本篇博文主要介绍为什么需要语义缩放.什么是语义缩放.如何构建语义缩放. 为什么需要语义缩放 如果用过Windows 8系统的开发者都知道在Win ...
- 快速构建Windows 8风格应用12-SearchContract概述及原理
原文:快速构建Windows 8风格应用12-SearchContract概述及原理 本篇博文主要介绍Search Contract概述.Search Contract面板结构剖析.Search Co ...
随机推荐
- Scut游戏server引擎Unity3d访问
Scut提供Unity3d Sdk包.便利的高速发展和Scut游戏server对接: 看Unity3d示为以下的比率: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Asse ...
- 前端javascript模板
doT.js——前端javascript模板引擎问题备忘录 我手里维护的一个项目,遇到一个问题:原项目的开发人员在Javascript中,大量的拼接HTML,导致代码极丑,极难维护.他们怎么能够忍受的 ...
- Linux命令行下载文件百度云盘
本来想直接使用wget去下载.但百度似乎增加限制,下半停产,不就不再下.刚刚好找其他方法.另辟蹊径: http://oott123.github.io/bpcs_uploader/ 版权声明:本文博客 ...
- 设计模式之享元模式(Flyweight)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- Sicily 1299 Academy Awards (map + vector)集装箱
链接:http://soj.me/show_problem.php?pid=1299&cid= Description Selected from 3,850 teams from 1,329 ...
- 图片 Base64码 转换
import sun.misc.BASE64Decoder; private String getBase64Picture(String imgBase64Str) { FileOutputStre ...
- ACdreamoj(1105)模拟题
题意:射一次激光最多能够攻击到几个敌人(因为激光非常强大,能够在击中敌人后穿过它,而瑶瑶自己的坦克因为有特殊装置,所以不会被激光击中.激光也会直接穿过它) . 表示此处为空地 * 表示此处为障碍(激光 ...
- Date、DateTime值的格式化扩展函数
public static class DateTimeExtensions { public static DateTime ToUtc(this DateTime time) ...
- 浅谈javascript中的call()和apply()方法
话说在js中,每个函数都包含两个非继承而来的放方法,apply()和call(),使得我们能在特定的作用域中调用函数. 官方定义: 语法: fun.call(thisArg[, arg1[ ...
- 大话设计模式C++达到-文章16章-国家模式
一.UML画画 二.概念 状态模式(State):当一个对象的内在状态改变时同意改变其行为.这个对象看起来像是改变了其类. 三.说明 以下是来自书本和网络的对状态模式的定义和分析: (1)状态模式同意 ...