博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Phone 实用开发技巧(17):自定义应用程序的Tile
阅读量:6244 次
发布时间:2019-06-22

本文共 2333 字,大约阅读时间需要 7 分钟。

 在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, 
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)

 

源代码下载: 

    本文转自xshf12345 51CTO博客,原文链接:http://blog.51cto.com/alexis/645185,如需转载请自行联系原作者

你可能感兴趣的文章
我的友情链接
查看>>
javascript变量的作用域
查看>>
CakePHP 2.x CookBook 中文版 第七章 模型 之 保存数据(二)
查看>>
第8章 三路由不同网段互通实验(中级篇)
查看>>
【啊哈!算法】最快最简单的排序——桶排序
查看>>
运城数据恢复注册了一个网站
查看>>
shell脚本菜
查看>>
ubuntu jdk安装配置
查看>>
分布式系统若干经验总结
查看>>
使用JSONP解决跨域问题-代码示例
查看>>
golang Tag
查看>>
云端时代桌面云架构介绍(CTVI)
查看>>
iptables之实例
查看>>
第三周作业
查看>>
VTDecoderXPCService意外退出
查看>>
js 数字验证
查看>>
在repeater中实现radiobutton单选
查看>>
使用Ora2Pg工具把数据从Oracle导入到PostgreSQL
查看>>
条件注释判断浏览器
查看>>
页面自动刷新代码大全
查看>>