《Windows Phone 7开发笔记》------Live Tile的实现

  在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的重要属性:

 NameDescription
Public property  ActiveTiles 包含了所有已经Pin到桌面上Tile的集合。
Public property NavigationUri 表示所创建的Secondary Tile在点击时所要跳转到的页面所对应的Uri。

  

  >> StandardTileData类

  该类用于创建一个Tile,在创建、更新或删除Secondary Tile时均要通过它来进行操作。

  如下是StandardTileData的重要属性:

 NameDescription
Public property BackBackgroundImage 设置背面Tile的背景图片。
Public property BackContent 设置背面Tile上的文字信息。
Public property BackgroundImage 设置主页面Tile上的背景图片。
Public property BackTitle 设置背面Tile上的标题。
Public property Count 设置当前主页面Tile上显示的所推送的消息数量,取值范围是0-99。
Public property 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"));

  即可。

posted @ 2012-06-06 14:54  Linfeng Wu  阅读(2256)  评论(1编辑  收藏  举报