zoukankan      html  css  js  c++  java
  • 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

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

    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, 173173));
                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, 
    1731730100);
                    }
                }
                
    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)

    源代码下载: 

    如果您喜欢我的文章,您可以通过支付宝对我进行捐助,您的支持是我最大的动力https://me.alipay.com/alexis


    作者:Alexis
    出处:http://www.cnblogs.com/alexis/
    关于作者:专注于Windows Phone 7、Silverlight、Web前端(jQuery)。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过shuifengxuATgmail.com  联系我,非常感谢。

  • 相关阅读:
    Spring 框架学些(二)Spring AOP
    Spring框架学习(一)
    java spring框架的HelloWord
    Windows下查看进程执行参数
    js的code标签显示插件
    初接触hbase数据库
    gpg加密使用
    .net core全球化配置、使用
    CSS添加本地字体
    2011年NOIP普及组复赛题解
  • 原文地址:https://www.cnblogs.com/alexis/p/2146139.html
Copyright © 2011-2022 走看看