wp7.8 和wp8 Live Tile的區(qū)別在于wp7.8的第三方應用僅支持兩種大小的Tile 而wp8支持三種 應為wp8開放了三種模板供開發(fā)者使用,而wp7.8僅有一種模板那就是TileTemplate5,這也是默認的。Tile展示方式。TileTemplate5 只能夠使用一種大小,它與 Windows Phone 8 中等大小相對應。
既然wp7.8支持大磁貼的話 那么 wp8 引用 Microsoft.Phone.Shell 下的三種模板如果通過反射的方式 ,wp7.8肯定也能支持,(WP8三種模板了解 給出鏈接http://www.silverlightchina.net/html/zhuantixilie/winphone7/2012/1229/21142.html)
這里通過反編譯wp8下的Filp模板。當然也可以反射Cycle和 Icon 只要屬性和方法和反射中的一一對應就OK
好了用過代碼演示:
1:如果想讓你的應用支持大磁貼的話(WP8除外) 就必須判斷你手機版本是 7.5還是7.8
新建一個 CheckOSVersion類 // wp7.8的最低版本是8858所以就用8858最低版本來判斷
public class CheckOSVersion
{
private static Version TargetedVersion;
public static bool IsTargetedVersion
{
get { return Environment.OSVersion.Version >= CheckOSVersion.TargetedVersion; }
}
static CheckOSVersion() { CheckOSVersion.TargetedVersion = new Version(7, 10, 8858); }
}
2: 創(chuàng)建反射shell.dll的方法
private static void SetProperty(object instance, string name, object value)
{
Methodinfo setMethod = instance.GetType().GetProperty(name).GetSetMethod();
object[] objArray = new object[1];
objArray[0] = value;
setMethod.Invoke(instance, objArray);
}
//屬性必須和Filp下的對應的屬性一致
public static void UpdateFlipTile(string title, string backTitle, string backContent, string wideBackContent, int count, Uri tileId, Uri smallBackgroundImage, Uri backgroundImage, Uri backBackgroundImage, Uri wideBackgroundImage, Uri wideBackBackgroundImage)
{
if (CheckOSVersion.IsTargetedVersion)
{
Type type = Type.GetType("Microsoft.Phone.Shell.FlipTileData, Microsoft.Phone");
Type type1 = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone");
foreach (ShellTile activeTile in ShellTile.ActiveTiles)
{
if (activeTile.NavigationUri.ToString() != tileId.ToString())
{
continue;
}
object obj = type.GetConstructor(new Type[0]).Invoke(null);
CheckOSVersion.SetProperty(obj, "Title", title);
CheckOSVersion.SetProperty(obj, "Count", count);
CheckOSVersion.SetProperty(obj, "BackTitle", backTitle);
CheckOSVersion.SetProperty(obj, "BackContent", backContent);
CheckOSVersion.SetProperty(obj, "SmallBackgroundImage", smallBackgroundImage);
CheckOSVersion.SetProperty(obj, "BackgroundImage", backgroundImage);
CheckOSVersion.SetProperty(obj, "BackBackgroundImage", backBackgroundImage);
CheckOSVersion.SetProperty(obj, "WideBackgroundImage", wideBackgroundImage);
CheckOSVersion.SetProperty(obj, "WideBackBackgroundImage", wideBackBackgroundImage);
CheckOSVersion.SetProperty(obj, "WideBackContent", wideBackContent);
object[] objArray = new object[1];
objArray[0] = obj;
type1.GetMethod("Update").Invoke(activeTile, objArray);
break;
}
}
}
3:開始在進入應用程序的時候初始化一下吧 :)
ShellTile shellTile = ShellTile.ActiveTiles.First<ShellTile>();
if (shellTile != null)
{
//判斷是否是wp7.8系統(tǒng)
if (CheckOSVersion.IsTargetedVersion)
{
CheckOSVersion.UpdateFlipTile("愛壁紙HD", "愛壁紙HD", "", "", 0, new Uri("/", UriKind.Relative), new Uri("Background.png", UriKind.RelativeOrAbsolute), new Uri("http://s.qdcdn.com/cl/10920808,256,256.jpg", UriKind.RelativeOrAbsolute), null, new Uri("bigtile.png", UriKind.RelativeOrAbsolute), null);
}
return;
}
else
{
return;
}
//PS :wp7.8下要想支持大磁貼的話還有一個要求就是這段代碼必須得經(jīng)過初始化,也就是如果 你第二次進入軟件的時候你的應用才會支持
附上源碼:http://pan.baidu.com/share/link?shareid=476410&uk=85241834