MSDN帮助:http://msdn.microsoft.com/en-us/library/hh202948(v=VS.92).aspx
Tile,英文单词的中文意思是砖瓦、瓦片、瓷片的意思,真佩服微软起的这个名字,它是在Windows Phone手机的桌面上呈现一个小方块,它的作用是在桌面上显示一个启动程序的快捷方式,同时可以动态显示一些提示信息。
一)Tile的简单介绍
Tile的正面
Tile的背面
1)小方块的底部可以显示应用程序的名称。
2)小方块的右上角显示一个0-99的数字。
3)小方块的背景图片可以自由设置为尺寸为173*173、jpg或png格式的图片,图片的大小如果不合要求,则会自动缩放。
4)小方块的显示有两面:正面和背面。
正面可以设置:背景图片BackgroundImage、程序标题Title、右上角数字Count;
背面可以设置:背景图片BackBackgroundImage、程序标题BackTitle、内容文字BackContent。
小方块正面和背面的翻转显示是自动的,由系统控制。
5)一个应用程序可以有两个Tile的小方块:一个是默认的主方块(Application Tile),一个是附属的次方块(Secondary Tile)。
Application Tile:程序安装后由用户操作“固定到开始屏幕”(英文为“pin to start”)自动创建,删除时也是由用户在桌面操作删除(手指长按方块然后点击出现的那个小图钉),不能由程序代码来创建或删除。
Secondary Tile:由程序代码来创建和维护,作用与主方块类似,与主方块配合使用,只能添加一个Secondary Tile(即一个应用程序总共最多有两个Tile,一个Application Tile和一个Secondaty Tile),MSDN上的原因描述我也不大明白,估计是怕复杂了拖累系统吧。
6)更新操作:
更新时只更新需要更新的内容即可,不必对所有属性都进行设置,更新操作只对传入的属性信息进行更新。
如果是引用网络上的图片,其大小不能超过80KB,下载图片的过程必须在30秒内完成,否则将不会显示图片,不支持网络协议https。
设置Tile的内容时,至少应该设置正面的背景图片。
设置右上角的数字时,其数值是一个可以为空null的整型,数值0和null都不会显示,即右上角不会显示数字。
二)操作默认的主方块Tile
主方块Tile只能进行更新,更新途径有三种方式。
1)更改应用程序的属性。
鼠标双击应用程序的Properties文件夹,打开工程的属性对话框,在Application页面的下方,有个Tile Options的配置项目,可以设置主方块的正面的标题和背景图片。
2)更改应用程序的WMAppManifest.xml文件。
小方块的正面内容的XML标签已经自动创建好,各个项目的值是空白的,输入数值即可。同时添加背面内容的XML标签和相应的数值即可,背面的背景图片XML标签的名称我没有找到,使用BackBackgroundImageUri在运行时报错,说是非法的标签。
3)编写代码。
工程添加引用Microsoft.Phone,单元添加引用 using Microsoft.Phone.Shell,在某个事件中添加下面的代码即可,建议在Page的OnNavigatedTo事件中使用。
ShellTile defaultTile = ShellTile.ActiveTiles.First();
StandardTileData tileData = new StandardTileData()
{
Title = "",
Count = 0,
BackgroundImage = new Uri("AppTileIcon.png", UriKind.Relative),
BackTitle = "我的手机监视器",
BackBackgroundImage = new Uri("AppTileIcon.png", UriKind.Relative),
BackContent = "电池剩余:0 小时"
};
defaultTile.Update(tileData);
三)操作附属的次方块Tile
1)添加:
//先判断是否存在包含有一个标志字符串“SecondaryTile”的Tile,这里的Linq我不太懂啊;(
ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("SecondaryTile"));
//如果不存在,则创建
if (newTile == null)
{
int? tileCount = Int32.Parse(txtboxTileCount.Text);
StandardTileData tileData = new StandardTileData()
{
Title = txtboxTileTitle.Text,
BackgroundImage = new Uri("Tock.png", UriKind.Relative),
Count = tileCount,
BackTitle = txtboxTileTitle.Text,
BackBackgroundImage = new Uri("Tock.png", UriKind.Relative),
BackContent = "第2个Tile的后台内容"
};
//调用ShellTile的Create方法,同时传入该Tile(是Secondary Tile)需要使用的启动程序的参数(必须要传),那个英文问号后面的那一串就是前面判断使用的字符串内容。
//只能创建一个,创建第二个Secondary Tile时会报错的。
ShellTile.Create(new Uri("/MainPage.xaml?SecondaryTile", UriKind.Relative), tileData);
}
注意:第一次运行时,桌面上是没有方块Tile的,需要手动添加。
2)删除:
ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("SecondaryTile"));
//如果存在,则删除
if (newTile != null)
newTile.Delete();
3)更新:
ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("SecondaryTile"));
//如果存在,则更新
if (newTile != null)
{
StandardTileData tileData = new StandardTileData
{
Title = txtboxTileTitle.Text
};
newTile.Update(NewTileData);
}
四)思考
1)可以更新的内容太少了,如字体不能设置、只有这6项内容可以设置,Tile的尺寸大小是固定的173*173,三星的天气预报程序Now的Tile是个长方形的方块,相当于两个小方块的大小,上面可以显示城市名称、温度信息等,估计整体是个图片。
2)使用ShellTileSchedule自动更新Tile时,都只能更新背景图片,不知啥原因?且背景图片必须是网络上的图片,不允许使用本地图片,太窝火了,这就是个鸡肋嘛!
3)使用隔离区的图片文件和接收Push消息,还没仔细研究过,需要时可以查看MSDN。
4)XNA游戏程序中应该也能这样使用吧。