我正在尝试使用MSDN文档中的方法,在我的现有Windows Phone OS 7.1应用程序中支持新的Windows Phone磁贴功能。然而,我似乎无法通过反射创建IconicTile,因为它一直给我NullReferenceExceptions和AmbiguousMatchExceptions。以下是我正在使用的代码:
我也尝试使用Windows Phone OS 7.1的方式(
public static void CreateIconicTile(Uri tileId, string title, int count, string wideContent1, string wideContent2, string wideContent3, Uri smallIconImage, Uri iconImage, Color backgroundColor)
{
// Get the new IconicTileData type.
Type iconicTileDataType = Type.GetType("Microsoft.Phone.Shell.IconicTileData, Microsoft.Phone");
// Get the ShellTile type so we can call the new version of "Update" that takes the new Tile templates.
Type shellTileType = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone");
// Get the constructor for the new IconicTileData class and assign it to our variable to hold the Tile properties.
StandardTileData CreateTileData = new StandardTileData();
// Set the properties.
SetProperty(CreateTileData, "Count", count);
SetProperty(CreateTileData, "WideContent1", wideContent1);
SetProperty(CreateTileData, "WideContent2", wideContent2);
SetProperty(CreateTileData, "WideContent3", wideContent3);
SetProperty(CreateTileData, "SmallIconImage", smallIconImage);
SetProperty(CreateTileData, "IconImage", iconImage);
SetProperty(CreateTileData, "BackgroundColor", backgroundColor);
// Invoke the new version of ShellTile.Create.
shellTileType.GetMethod("Create").Invoke(null, new Object[] { tileId, CreateTileData });
}
我也尝试使用Windows Phone OS 7.1的方式(
ShellTile.Create(...)
)创建磁贴,然后通过反射调用MSDN文档中描述的UpdateIconicTile
方法。但那也不起作用。
非常感谢任何帮助!
编辑:为了澄清,我正在检查平台版本以确保此代码仅在Windows Phone 8设备上运行,并已将必要的代码添加到我的清单中。
已解决:由于Martin Suchan提供的答案,我能够解决这个问题。问题出在我的Invoke(...)
调用缺少一些属性。这是我现在正在使用的新行来实际创建磁贴:
shellTileType.GetMethod("Create", new Type[] { typeof(Uri), typeof(ShellTileData), typeof(bool) }).Invoke(null, new Object[] { tileId, CreateTileData, true });