【WP 8.1开发】同时更新多种磁贴
一般应用程序都会包含多个尺寸的磁贴,如小磁贴(71×71)、中磁贴(150×150)和宽磁贴(310×150)。常规的磁贴更新做法是用XML文档来定义更新内容,然后再提交更新。如:
<tile>
<visual version="2">
<binding template="TileSquare150x150Text02" fallback="TileSquareText02">
<text id="1"></text>
<text id="2"></text>
</binding>
</visual>
</tile>
不过这样只是150×150大小的磁贴被更新,我们无法确定用户正在使用哪个尺寸的磁贴,有可能用户正在用310×150的宽磁贴,也许大家会想到,那就再对宽磁贴进行一次更新,如:
<tile>
<visual version="2">
<binding template="TileWide310x150Image" fallback="TileWideImage">
<image id="1" src=""/>
</binding>
</visual>
</tile>
以上做法是分两次更新的,那么,有没有可能做到一次更新就能同时修改150x150,以及310x150两种磁贴呢?
先来分析一下,定义磁贴的XML文档是以一个tile元素作为根节点的,表示它更新的是磁贴,而不是发出Toast通知,接下来在tile中包含单个visual元素,visual元素下面是binding元素。
对了,技巧就在这里了,根据文档的说明,visual元素是可以包含多个binding元素的,而一般一个binding就是描述一个模板的磁贴。
啊,有思路了吧? 你应该猜到了,就是在visual元素下多放几个binding元素,就能同时更新多种磁贴了。
举个例子,假设我有一个应用同时支持多种尺寸的磁贴,我希望可以同时更新150x150的和310x150两种磁贴,那么我只要把XML文档变为这样就可以了。
<tile>
<visual version="2">
<!-- 宽磁贴 -->
<binding template="TileWide310x150BlockAndText02" fallback="TileWideBlockAndText02">
<text id="1">Text Field 1</text>
<text id="2">Text Field 2 (block text)</text>
<text id="3">Text Field 3 (under block text)</text>
</binding>
<!-- 中型磁贴 -->
<binding template="TileSquare150x150Text02" fallback="TileSquareText02">
<text id="1">Text Field 1 (larger text)</text>
<text id="2">Text Field 2</text>
</binding>
</visual>
</tile>
如何? 咱们试试,看能不能实现。
XmlDocument docx = new XmlDocument();
// 创建根节点
XmlElement tile = docx.CreateElement("tile");
docx.AppendChild(tile);
// 创建visual元素
var visual = docx.CreateElement("visual");
// 设置特性
visual.SetAttribute("version", "");
tile.AppendChild(visual);
// 添加第一个binding元素
var binding = docx.CreateElement("binding");
binding.SetAttribute("template", "TileSquare150x150Text02");
binding.SetAttribute("fallback", "TileSquareText02");
visual.AppendChild(binding);
// 创建两个字段
{
var text1 = docx.CreateElement("text");
binding.AppendChild(text1);
text1.SetAttribute("id", "");
var textNode = docx.CreateTextNode(this.txtLarge.Text);
text1.AppendChild(textNode);
var text2 = docx.CreateElement("text");
binding.AppendChild(text2);
text2.SetAttribute("id", "");
textNode = docx.CreateTextNode(txtContent.Text);
text2.AppendChild(textNode);
}
// 添加第二个binding元素
binding = docx.CreateElement("binding");
visual.AppendChild(binding);
binding.SetAttribute("template", "TileWide310x150BlockAndText02");
binding.SetAttribute("fallback", "TileWideBlockAndText02");
// 添加三个字段
{
var text1 = docx.CreateElement("text");
binding.AppendChild(text1);
text1.SetAttribute("id", "");
var textNode = docx.CreateTextNode(this.txtLargeBlock.Text);
text1.AppendChild(textNode);
var text2 = docx.CreateElement("text");
binding.AppendChild(text2);
text2.SetAttribute("id", "");
textNode = docx.CreateTextNode(this.txtUnderBlock.Text);
text2.AppendChild(textNode);
var text3 = docx.CreateElement("text");
binding.AppendChild(text3);
text3.SetAttribute("id", "");
textNode = docx.CreateTextNode(this.txtNormalText.Text);
text3.AppendChild(textNode);
}
// 输出一下,以检查是否正确
System.Diagnostics.Debug.WriteLine(docx.GetXml()); // 2、创建通知更新
TileNotification notifi = new TileNotification(docx);
TileUpdateManager.CreateTileUpdaterForApplication().Update(notifi);
我这里是用位于Windows.Data.Xml.Dom命名空间下的API来创建XML文档的,如果你觉得这个太复杂,容易混乱,那你可以考虑直接拼接文本,这样可能不容易弄错。
好,看看效果。
如何如何,这样是不是省事了。
示例代码:http://files.cnblogs.com/tcjiaan/MultipTileUpdateApp.zip
最后我再废话一下,不管是磁贴还是Toast通知的XML文档,千万不要去死记硬背,不用记的,用的时候查文档就行了;而且,要有选择性地运用,也没必要在一个应用中把所有的XML模板都用过一遍,这样会很恐怖的,只要挑选需要的模板就可以了。
【WP 8.1开发】同时更新多种磁贴的更多相关文章
- 【WP 8.1开发】How to 图像处理
在今天的吹牛节目开始之前,先交代一件事: 关于玩WP 8.1开发所使用的VS版本问题.对版本的要求是2013的Update2,这是最低要求,只要是这个版本或以上都可以,而update3,update4 ...
- 没有苹果电脑打包iOS平台的 Ionic 2程序——《Ionic 2 实例开发》更新内容
没有苹果电脑打包iOS平台的 Ionic 2程序--<Ionic 2 实例开发>更新内容春节刚过,祝各位新的一年里万事如意,一帆风顺.<Ionic 2 实例开发>在这段时间里更 ...
- HDU4578 线段树(区间更新 + 多种操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 , 线段树的区间更新 + 多种操作,好题. 虽然是比较裸的线段树,但是比较麻烦,并且有很多细节 ...
- Android研究之游戏开发摄像头更新
游戏中摄像头的原理介绍 在游戏开发中更新摄像头的位置能够决定屏幕显示的内容,尤其是RPG类游戏摄像头有着很关键的数据.我举一个样例 有时候我们在玩RPG游戏的时候进入一个新的场景 ...
- 【WP 8.1开发】自定义(RAW)通知的使用
继续前面的话题,还是推送通知.上一篇文章中遗留了RAW通知的推送没有给各位演示,特特地留到现在,不为别的,只为这个RAW通知有点意思,玩起来会比较有意思.官方文档将RAW通知译为“原始通知”,这里还是 ...
- 【WP 8.1开发】手机客户端应用接收推送通知
上一篇文章中,已经完成了用于发送通知的服务器端,接下来我们就用这个服务端来测试一下. 在开始测试之前,我们要做一个接收通知的WP应用. 1.启动VS Express for Windows,新建项目, ...
- 【WP 8.1开发】解决调用真实摄像头会死机的问题
无论你是用Silverlight还是用RT的API来开发,在使用MediaCapture拍照片或录视频时,要是在模拟器上运行会万事大吉:但是,一旦放到真实手机上运行,肯定有人发现了,细心的朋友肯定发现 ...
- 【WP 8.1开发】推送通知测试服务端程序
所谓推送通知,用老爷爷都能听懂的话说,就是: 1.我的服务器将通知内容发送到微软的通知服务器,再由通知服务器帮我转发消息. 2.那么,微软的推送服务器是如何知道我的服务器要发消息给哪台手机呢?手机客户 ...
- 【WP 8.1开发】一键锁屏
在WP8的时候,关于如何关闭屏幕,国内外都有不少文章了,大家有兴趣地可以搜搜,很多,我就不给链接了,因为稍后我的例子中会有. 其实,关闭屏幕是调用了未开放的API,正因为这个API未开放的,不敢保证所 ...
随机推荐
- EOS -- 一种灵巧的系统运行跟踪模块
EOS到底是什么词的缩写,我猜应该是Error of System.最早接触它,是在UT那会.不过那会它是被设计成一个很大的数组,也没有被包含调用函数和行号,又或是时间,只是些计数.编码时,加减一个E ...
- response.sendRedirect的细节
今天敲书上的例子的时候无意间发现,response中的sendRedirect()重定向到另一个servlet时,调用的是doget方法,不明所以,百度得知,原来还牵扯到http协议的细节问题,原文如 ...
- Hive使用技巧
hive默认查询不会显示列名, 当一个表字段比较多的时候,往往看不出值与列之间的对应关系,对日常查错及定位问题带来不便,像下面这样. hive> >select * from exampl ...
- MongoDB学习笔记—02 MongoDB入门
Mongodb的基本概念 文档:是MongoDB中数据的基本单元,类似于关系型数据库中的行. 集合:多个文档组成一个集合,类似于关系型数据库中的表. 数据库:MongoDB的当个实例可以容纳多个独立的 ...
- MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC (转)
一.问题描述 我所使用的编程环境:VS2010 出现的问题如下: MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号_WinMain@16,该符号在函数 _ ...
- 使用SQL语句逐条更新每条记录
有些时候,我们希望同时更新表中的多条记录,但更新的值不一样. declare @i int declare @j int declare @phone varchar(20) set @j=1 sel ...
- Windows下Oracle安装图解----oracle-win-64-11g 详细安装步骤
一. Oracle 下载 官方下地址 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.htm ...
- 平滑处理Smooth之图像预处理算法-OpenCV应用学习笔记三
大清早的我们就来做一个简单有趣的图像处理算法实现,作为对图像处理算法学习的开端吧.之所以有趣就在于笔者把算法处理的各个方式的处理效果拿出来做了对比,给你看到原图和各种处理后的图像你是否能够知道那幅图对 ...
- 解决Ubuntu发热量大的问题
转自:http://blog.csdn.net/tracker_w/article/details/8801971 用Ubuntu 的朋友应该都有体会,开机不久风扇就开始狂转,本本也会很热.据说是双显 ...
- Mysql 之旅开始啦
本来是打算以后从事oracle 的DBA 的,结果面试了mysql的dba,总的来说学习到的oracle 知识还是在面试中很有用的,毕竟都是想通的.最近又不好好学习了,为了鼓励自己多学习mysql,以 ...