WindowsPhone 7.8 Tiles 2 : Secondary Tiles

简介:

关于7.8的Default Tile见上篇:http://www.cnblogs.com/sun8134/archive/2013/02/04/2892421.html

这篇主要来介绍下7.8的Secondary Tiles

还是先上MSDN:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj720574(v=vs.105).aspx

Supported features


 

A Windows Phone OS 7.1 app that runs on Windows Phone 8 or Windows Phone 7.8 supports the following Tile features:

 

不同于Default Tile只支持Flip Tile

Secondary Tiles对wp8的三种Tile都是支持的

先上段视频看看效果:

 

 

看完视频

下面我们来看看实现

 

1,准备

首先是准备工作,先把用于实现创建、更新、删除Secondary Tiles的方法都准备好,方便使用。

        private static void SetProperty(object instance, string name, object value)
        {
            var setMethod = instance.GetType().GetProperty(name).GetSetMethod();
            setMethod.Invoke(instance, new object[] { value });
        }
 
        public static void CreateTile(Uri uri, ShellTileData tiledata, bool usewide)
        {
            Type shellTileType = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone");
            MethodInfo createmethod = shellTileType.GetMethod("Create", new[] { typeof(Uri), typeof(ShellTileData), typeof(bool) });
            createmethod.Invoke(null, new object[] { uri, tiledata, usewide });
        }
 
        public static void UpdateTile(ShellTile shelltile, ShellTileData tiledata)
        {
            Type shellTileType = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone");
            shellTileType.GetMethod("Update").Invoke(shelltile, new Object[] { tiledata });
        }
 
        public static void DeleteTile(ShellTile shelltile)
        {
            Type shellTileType = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone");
            shellTileType.GetMethod("Delete").Invoke(shelltile, new Object[] { });
        }

2,Flip Tile

还是先从Flip Tile开始吧,上一篇里其实说的挺明白的了

照例看看MSDN里的介绍:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206971(v=vs.105).aspx

image

image

 

然后根据MSDN的说明,准备下我们需要的图片:

image

 

创建Flip Tile

                Type tileDataType = Type.GetType("Microsoft.Phone.Shell.FlipTileData, Microsoft.Phone");
                ShellTileData FlipTileData = (ShellTileData)tileDataType.GetConstructor(new Type[] { }).Invoke(null);
                SetProperty(FlipTileData, "Title", "Flip Tile Title");
                SetProperty(FlipTileData, "Count", 0);
                Type tileDataType = Type.GetType("Microsoft.Phone.Shell.FlipTileData, Microsoft.Phone");
                SetProperty(FlipTileData, "BackTitle", "Back Flip Tile Title");
                SetProperty(FlipTileData, "BackContent", "BackContent");
                SetProperty(FlipTileData, "WideBackContent", "WideBackContent.");
                SetProperty(FlipTileData, "SmallBackgroundImage", new Uri("\\Flip\\bs.png", UriKind.Relative));
                SetProperty(FlipTileData, "BackgroundImage", new Uri("\\Flip\\b.png", UriKind.Relative));
                SetProperty(FlipTileData, "BackBackgroundImage", new Uri("\\Flip\\bb.png", UriKind.Relative));
                SetProperty(FlipTileData, "WideBackgroundImage", new Uri("\\Flip\\bw.png", UriKind.Relative));
                SetProperty(FlipTileData, "WideBackBackgroundImage", new Uri("\\Flip\\bbw.png", UriKind.Relative));                
                CreateTile(new Uri("/MainPage.xaml?tile=Flip", UriKind.Relative), FlipTileData, true);

 

更新Flip Tile

            ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("MainPage.xaml?tile=Flip"));
            if (newTile != null)
            {
                Type tileDataType = Type.GetType("Microsoft.Phone.Shell.FlipTileData, Microsoft.Phone");
                ShellTileData FlipTileData = (ShellTileData)tileDataType.GetConstructor(new Type[] { }).Invoke(null);
                SetProperty(FlipTileData, "Title", "Flip Tile Title");
                SetProperty(FlipTileData, "Count", 10);
                SetProperty(FlipTileData, "BackTitle", "Back Flip Tile Title");
                SetProperty(FlipTileData, "BackContent", "BackContent");
                SetProperty(FlipTileData, "WideBackContent", "WideBackContent.");
                SetProperty(FlipTileData, "SmallBackgroundImage", new Uri("\\Flip\\bs.png", UriKind.Relative));
                SetProperty(FlipTileData, "BackgroundImage", new Uri("\\Flip\\b.png", UriKind.Relative));
                SetProperty(FlipTileData, "BackBackgroundImage", new Uri("\\Flip\\bb.png", UriKind.Relative));
                SetProperty(FlipTileData, "WideBackgroundImage", new Uri("\\Flip\\bw.png", UriKind.Relative));
                SetProperty(FlipTileData, "WideBackBackgroundImage", new Uri("\\Flip\\bbw.png", UriKind.Relative));
                UpdateTile(newTile, FlipTileData);
            }

 

删除Flip Tile

            ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("MainPage.xaml?tile=Flip"));
            if (newTile != null)
            {
                DeleteTile(newTile);
            }

 

Flip Tile效果:

imageimage

 

3,Cycle Tile

下面我们来看看Cycle Tile

借助Cycle Tile,我们可以实现类似wp手机中picture hub的tile显示的图片切换效果

不过要注意最多只支持9张图片循环显示

还是先看看MSDN介绍吧:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207036(v=vs.105).aspx

image

image

 

然后还是先准备下切换用的图片:

image

 

创建Cycle Tile

                Type tileDataType = Type.GetType("Microsoft.Phone.Shell.CycleTileData, Microsoft.Phone");
                ShellTileData CycleTileData = (ShellTileData)tileDataType.GetConstructor(new Type[] { }).Invoke(null);
                SetProperty(CycleTileData, "Title", "Cycle Tile Title");
                SetProperty(CycleTileData, "Count", 0);
                SetProperty(CycleTileData, "CycleImages", new List<Uri> 
                { 
                    new Uri("\\Cycle\\1.png", UriKind.Relative), 
                    new Uri("\\Cycle\\2.png", UriKind.Relative), 
                    new Uri("\\Cycle\\3.png", UriKind.Relative), 
                    new Uri("\\Cycle\\4.png", UriKind.Relative),
                    new Uri("\\Cycle\\5.png", UriKind.Relative),
                    new Uri("\\Cycle\\6.png", UriKind.Relative),
                    new Uri("\\Cycle\\7.png", UriKind.Relative),
                    new Uri("\\Cycle\\8.png", UriKind.Relative),
                    new Uri("\\Cycle\\9.png", UriKind.Relative) 
                });
                SetProperty(CycleTileData, "SmallBackgroundImage", new Uri("\\Cycle\\159.png", UriKind.Relative));
                CreateTile(new Uri("/MainPage.xaml?tile=Cycle", UriKind.Relative), CycleTileData, true);

 

更新Cycle Tile

            ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("MainPage.xaml?tile=Cycle"));
            if (newTile != null)
            {
                Type tileDataType = Type.GetType("Microsoft.Phone.Shell.CycleTileData, Microsoft.Phone");
                ShellTileData CycleTileData = (ShellTileData)tileDataType.GetConstructor(new Type[] { }).Invoke(null);
                SetProperty(CycleTileData, "Title", "Cycle Tile Title");
                SetProperty(CycleTileData, "Count", 17);
                SetProperty(CycleTileData, "CycleImages", new List<Uri> 
                { 
                    new Uri("\\Cycle\\9.png", UriKind.Relative), 
                    new Uri("\\Cycle\\8.png", UriKind.Relative), 
                    new Uri("\\Cycle\\7.png", UriKind.Relative), 
                    new Uri("\\Cycle\\6.png", UriKind.Relative),
                    new Uri("\\Cycle\\5.png", UriKind.Relative),
                    new Uri("\\Cycle\\4.png", UriKind.Relative),
                    new Uri("\\Cycle\\3.png", UriKind.Relative),
                    new Uri("\\Cycle\\2.png", UriKind.Relative),
                    new Uri("\\Cycle\\1.png", UriKind.Relative) 
                });
                SetProperty(CycleTileData, "SmallBackgroundImage", new Uri("\\Cycle\\159.png", UriKind.Relative));
                UpdateTile(newTile, CycleTileData);
            }

 

删除Cycle Tile

            ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("MainPage.xaml?tile=Cycle"));
            if (newTile != null)
            {
                DeleteTile(newTile);
            }

 

Cycle Tile效果

imageimage

 

4,Iconic Tile

最后来看看Iconic Tile吧

使用Iconic Tile,我们终于可以让自己应用的Tile可以像wp上的Hotmail、Message等一样显示大号的消息通知了

还是先看看MSDN的说明吧:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207009(v=vs.105).aspx

image

image

 

准备好我们的图片(注意是细长的哦,要是方的可能会有两种结果,要么图标太小,要么数字离图标太远…):

image

 

创建Iconic Tile

                Type tileDataType = Type.GetType("Microsoft.Phone.Shell.IconicTileData, Microsoft.Phone");
                ShellTileData IconicTileData = (ShellTileData)tileDataType.GetConstructor(new Type[] { }).Invoke(null);
                SetProperty(IconicTileData, "Title", "Iconic Tile Title");
                SetProperty(IconicTileData, "Count", 7);
                SetProperty(IconicTileData, "BackgroundColor", Colors.Purple);//Color.FromArgb(255, 200, 10, 30)
                SetProperty(IconicTileData, "IconImage", new Uri("\\Iconic\\202.png", UriKind.Relative));
                SetProperty(IconicTileData, "SmallIconImage", new Uri("\\Iconic\\110.png", UriKind.Relative));
                SetProperty(IconicTileData, "WideContent1", "WideContent1");
                SetProperty(IconicTileData, "WideContent2", "WideContent2");
                SetProperty(IconicTileData, "WideContent3", "WideContent3");
                CreateTile(new Uri("/MainPage.xaml?tile=Iconic", UriKind.Relative), IconicTileData, true);

 

更新Iconic Tile

            ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("MainPage.xaml?tile=Iconic"));
            if (newTile != null)
            {
                Type tileDataType = Type.GetType("Microsoft.Phone.Shell.IconicTileData, Microsoft.Phone");
                ShellTileData IconicTileData = (ShellTileData)tileDataType.GetConstructor(new Type[] { }).Invoke(null);
                SetProperty(IconicTileData, "Title", "Iconic Tile Title");
                SetProperty(IconicTileData, "Count", 19);
                SetProperty(IconicTileData, "BackgroundColor", Color.FromArgb(255, 200, 10, 30));
                SetProperty(IconicTileData, "IconImage", new Uri("\\Iconic\\202.png", UriKind.Relative));
                SetProperty(IconicTileData, "SmallIconImage", new Uri("\\Iconic\\110.png", UriKind.Relative));
                SetProperty(IconicTileData, "WideContent1", "Edit WideContent1");
                SetProperty(IconicTileData, "WideContent2", "Edit WideContent2 Edit WideContent2");
                SetProperty(IconicTileData, "WideContent3", "Edit WideContent3 Edit WideContent3 Edit WideContent3");
                UpdateTile(newTile, IconicTileData);
            }

 

删除Iconic Tile

            ShellTile newTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("MainPage.xaml?tile=Iconic"));
            if (newTile != null)
            {
                DeleteTile(newTile);
            }

Iconic Tile效果

imageimageimage

 

 

这次就先写这么多

剩下的下次再写

提前预告:下一篇来介绍一个快速生成live tile的工具

 

本文源码:

 

 

参考:

http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.shell.shelltile.delete(v=vs.105).aspx

http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.shell.shelltile.update(v=vs.105).aspx

http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj720574(v=vs.105).aspx

http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj720574(v=vs.105).aspx

http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206971(v=vs.105).aspx

http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207009(v=vs.105).aspx


本文转自 sun8134 博客园博客,原文链接:http://www.cnblogs.com/sun8134/archive/2013/02/06/2908102.html   ,如需转载请自行联系原作者


相关文章
|
8月前
|
JavaScript
解决 NavigationDuplicated: Avoided redundant navigation to current location: “/“
解决 NavigationDuplicated: Avoided redundant navigation to current location: “/“
147 0
解决 NavigationDuplicated: Avoided redundant navigation to current location: “/“
|
9月前
DT Slate Brush Browser Plug -in description
DT Slate Brush Browser Plug -in description
40 0
|
图形学
unity报错之Material doesn‘t have a texture property ‘_MainTex
Material doesn‘t have a texture property ‘_MainTex
unity报错之Material doesn‘t have a texture property ‘_MainTex
Difference between a normal BSP application and a WebClient UI component
Difference between a normal BSP application and a WebClient UI component
Difference between a normal BSP application and a WebClient UI component
SAP Material type mapping
Created by Wang, Jerry, last modified on Oct 12, 2016
SAP Material type mapping
|
Web App开发
where and when navigation target url is retrieved by SAP UI5 Framework
Created by Jerry Wang, last modified on Jan 17, 2015
where and when navigation target url is retrieved by SAP UI5 Framework

热门文章

最新文章