在Windows Phone SDK 7.0中每一个Application只能对应一个Tile,也就是不管你如何推送或者更新都只能有一个Tile。在SDK 7.1之后就出现了多Tile,开发者可以自己定制Tile,我们将其称为Secondary Tile。
下面我们来看一下如何新建一个Secondary Tile。创建Secondary Tile需要涉及到两个重要的类:
>> ShellTile类
该类主要负责管理多个Secondary Tile,ActiveTiles是所拥有的Tile的集合,第一个Tile就是App本身自带的Tile。
如下是ShellTile的重要属性:
Name | Description | |
---|---|---|
ActiveTiles | 包含了所有已经Pin到桌面上Tile的集合。 | |
NavigationUri | 表示所创建的Secondary Tile在点击时所要跳转到的页面所对应的Uri。 |
>> StandardTileData类
该类用于创建一个Tile,在创建、更新或删除Secondary Tile时均要通过它来进行操作。
如下是StandardTileData的重要属性:
Name | Description | |
---|---|---|
BackBackgroundImage | 设置背面Tile的背景图片。 | |
BackContent | 设置背面Tile上的文字信息。 | |
BackgroundImage | 设置主页面Tile上的背景图片。 | |
BackTitle | 设置背面Tile上的标题。 | |
Count | 设置当前主页面Tile上显示的所推送的消息数量,取值范围是0-99。 | |
Title | 设置主页面Tile上的标题 |
下面来进行一些实例练习:
>> 创建一个Secondary Tile
1 // 通过点击事件触发创建Secondary Tile的事件 2 private void button1_Click(object sender, RoutedEventArgs e) 3 { 4 // 下行代码表示确认是否已存在包含"ID=Wu"关键字的Secondary Tile 5 ShellTile find = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("ID=Wu")); 6 7 // 若没有则创建新的Secondary Tile 8 if (find == null) 9 { 10 StandardTileData data = new StandardTileData 11 { 12 BackgroundImage = new Uri("/1.jpg", UriKind.Relative), 13 Title = "SecondTile", 14 Count = 99, 15 BackTitle = "BackTitle", 16 BackContent = "BackContent", 17 BackBackgroundImage = new Uri("/2.jpg", UriKind.Relative) 18 }; 19 20 // 调用Create方法创建,并设置该Secondary Tile所要跳转的页面的Uri和关键字参数 21 ShellTile.Create(new Uri("/Page1.xaml?ID=Wu", UriKind.Relative), data); 22 } 23 }
上示代码完成之后还需对所跳转页面做一定的内容添加
1 public partial class Page1 : PhoneApplicationPage 2 { 3 public Page1() 4 { 5 InitializeComponent(); 6 } 7 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 8 { 9 base.OnNavigatedTo(e); 10 11 // 在PageTitle中显示传递过来的值 12 this.PageTitle.Text = this.NavigationContext.QueryString["ID"]; 13 } 14 }
>> 更新Application Tile
1 // 通过点击事件触发更新Tile事件 2 private void button2_Click(object sender, RoutedEventArgs e) 3 { 4 // 找到第一个Tile,也就是该App本身主Tile 5 ShellTile find = ShellTile.ActiveTiles.First(); 6 7 // 若找到,则更新其内容 8 if (find != null) 9 { 10 StandardTileData data = new StandardTileData(); 11 data.Title = "Update Tile"; 12 data.BackgroundImage = new Uri("/1.jpg", UriKind.Relative); 13 data.Count = 20; 14 data.BackContent = "BackContent"; 15 data.BackTitle = "Update Back Tile"; 16 data.BackBackgroundImage = new Uri("/2.jpg", UriKind.Relative); 17 18 // 调用Update方法更新 19 find.Update(data); 20 } 21 }
更新Secondary Tile的方法和更新Application Tile一样,只需在将
ShellTile find = ShellTile.ActiveTiles.First();
改为
ShellTile find = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("ID=Wu"));
即可。
转载于:https://www.cnblogs.com/wulinfeng/archive/2012/06/06/2538206.html