Windows Phone 实用开发技巧(17):自定义应用程序的Tile

在Windows Phone 7 (Nodo)之前的版本中,我们在应用程序列表中长按某个应用程序的时候,会弹出“Pin To Start”的选择,选中后系统会将该应用程序的快捷方式Pin到启动界面中,类似于Windows 上的桌面快捷方式。那时候呈现在启动界面的图片是应用程序中的Background.png,如果你没有改变该变片的话,Pin到Start中的图片大致如下:

 

在Mango中,我们可以做的更多(在Nodo中我们仅能改变背景图片和应用程序的显示名字),在Mango中,我们可以:
1. 动态更新Pin 到桌面的背景图片
2. 创建一个Secondary的Tile,让我们的Tile 变得更加Live
3. 可以使用Back Agent动态更新Count
马宁大大给出了一篇很好的入门文章 《马宁的Windows Phone 7.1初体验(三)——Tile》

下面讲讲稍微高级一点的知识

1. 在代码中合成图片  

我在项目中会用到如下三张图片: 

 第一张BackBg.png是用于Secondary Tile的背景图片,用于和第三张图片合成,生成一张新的Secondary Tile的背景图片,中间一张图片即Tile的背景图片,最终的效果图如下图:

 

合成图片的思想是利用WriteableBitmap可以将UIElement保存为图片,下面是详细代码:

public   static   string  CreateBackground()
        {
            Grid grid 
=   new  Grid
            {
                Background 
=   new  ImageBrush
                {
                    ImageSource 
=   new  BitmapImage
                    {
                        UriSource 
=   new  Uri( " /mangTile;component/Images/BackBg.png " , UriKind.Relative),
                        CreateOptions 
=  BitmapCreateOptions.IgnoreImageCache
                    }
                },
                Width 
=   173 ,
                Height 
=   173
            };
            Image profileImg 
=   new  Image
            {
                Height
= 48 ,
                Width
= 48 ,
                Source 
=   new  BitmapImage
                {
                    UriSource 
=   new  Uri( " /mangTile;component/Images/u97911.jpg " , UriKind.Relative),
                    CreateOptions 
=  BitmapCreateOptions.IgnoreImageCache
                },
            };
            grid.Children.Add(profileImg);
            grid.Arrange(
new  Rect(0d, 0d,  173 173 ));
            WriteableBitmap wbmp 
=   new  WriteableBitmap(grid,  null );
            
string  tiledirectory  =   " Shared/ShellContent/tiles " ; // note :父目录必须是 Shared/ShellContent
             string  fullPath  =  tiledirectory  +   @" / "   +   " LiveTile.jpg " ;
            
using  (var store  =  IsolatedStorageFile.GetUserStoreForApplication())
            {
                
if  ( ! store.DirectoryExists(tiledirectory))
                {
                    store.CreateDirectory(tiledirectory);
                }
                
using  (var stream  =  store.OpenFile(fullPath, System.IO.FileMode.OpenOrCreate))
                {
                    wbmp.SaveJpeg(stream, 
173 173 0 100 );
                }
            }
            
return   " isostore:/ "   +  fullPath;}
StandardTileData std  =   new  StandardTileData
            {
                BackgroundImage
= new  Uri( " /Background.png " ),
                Title 
=   "" ,
                BackTitle 
=   " Secondary " ,
                BackBackgroundImage 
=   new  Uri(CreateBackground())
            };
ShellTile.Create(new Uri("/MainPage.xaml", UriKind.Relative),std);

 

 2. ShellTile 的ActiveTiles属性

 MSDN的解释为Contains the collection of an applications tiles pinned to Start. 就是包含应用程序已经Pin to start的集合,要注意的是:

第一、指的是当前的应用程序,而不是所有的应用程序

第二、不管你的应用程序有没有Pin To Start,  ActiveTiles中始终包含一个默认的Tile(Uri为”/“),而且始终为第一个

第三、如果你讲Uri为“/MainPage.xaml” Pin到桌面了,则ActiveTiles包含两个Tile(Uri分别为“/”与/MainPage.xaml)

 

源代码下载: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值