导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

将 Windows Phone 8 和 Windows Phone 7.8 磁贴功能添加到 Windows Phone OS 7.1 应用

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

Windows Phone 8 和 Windows Phone 7.8 拥有新的磁贴大小,有助于装点“开始”屏幕。如果您计划维护面向 Windows Phone OS 7.1 的应用,则可以使用反射来访问展示新磁贴功能的 Windows Phone 8 和 Windows Phone 7.8 API。这样,如果您的 Windows Phone OS 7.1 应用在 Windows Phone 8 或 Windows Phone 7.8 上运行,那么这些客户将能够访问新的磁贴功能。

面向 Windows Phone 7.8 的 Windows Phone SDK 更新 提供了 Windows Phone SDK 8.0 和 Windows Phone SDK 7.1 的更新,让您可以查看您的应用在 Windows Phone 7.8 设备上的显示和运行方式。若要向您的应用添加宽磁贴支持,要使用的唯一被推荐且受支持的 SDK 是 Windows Phone SDK 8.0。

说明注意:

如果在 Windows Phone SDK 7.1 工具中向您的应用添加宽磁贴,则在构建应用时会出错,因为 Windows Phone 8 的应用清单文件中包含新的 <AppExtra> 元素。若要将您的应用成功发布到 Windows Phone 应用商店,您可以使用不支持的变通方法,如 使用 Windows Phone SDK 7.1 向应用添加宽磁贴中所述。

在 Windows Phone 8 或 Windows Phone 7.8 上运行的 Windows Phone OS 7.1 应用支持以下磁贴功能:

您可以采用与 Windows Phone 8 应用相同的方法,创建和更新 Windows Phone OS 7.1 应用中的 Windows Phone 8 和 Windows Phone 7.8 磁贴。一个区别是,您必须首先使用本地图像更新小、中等和宽(可选)默认磁贴。在下一次更新时,您可以照常使用本地或远程图像。

您必须使用反射来启用 Windows Phone OS 7.1 应用中的 Windows Phone 8 和 Windows Phone 7.8 磁贴功能。有关反射和如何使用它的详细信息,请参见 .NET Framework 中的反射

说明注意:

若要启用宽磁贴或在小磁贴上设置图像,必须在运行时使用 ShellTile.Update 方法和翻转磁贴模板来更新应用的默认磁贴。

更新应用清单文件

  1. “解决方案资源管理器”中,展开“属性”,右键单击 WMAppManifest.xml,选择“打开方式”,然后选择“带编码的源代码(文本编辑器)”

  2. 将以下 <AppExtra> 元素添加到 <App> 元素上方。

    <AppExtra xmlns="" AppPlatformVersion="8.0">
        <Extra Name="Tiles"/>
    </AppExtra>
    
    
说明注意:

AppPlatformVersion="8.0" 适用于 Windows Phone 8 和 Windows Phone 7.8。

添加代码以使用反射来更新 Windows Phone 8 或 Windows Phone 7.8 磁贴

根据操作系统版本,您可以添加代码以使用反射来更新 Windows Phone 8 或 Windows Phone 7.8 磁贴。

  1. 在类级别上,查阅操作系统版本。下面显示了如何查找 Windows Phone 7.8 或更高版本:

    private static Version TargetedVersion = new Version(7, 10, 8858);
    public static bool IsTargetedVersion {get{return Environment.OSVersion.Version >= TargetedVersion;}}
    
    
  2. 使用上面的 IsTargetedVersion 变量,以确定您应该使用的磁贴代码。这样,您的应用不但可以在 Windows Phone OS 7.1 上工作,而且也可以在 Windows Phone 8 和 Windows Phone 7.8 上工作。

    以下代码示例显示了用于通过反射来更新翻转磁贴的方法。

    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 (IsTargetedVersion)
       {
          // Get the new FlipTileData type.
          Type flipTileDataType = Type.GetType("Microsoft.Phone.Shell.FlipTileData, 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");
    
          // Loop through any existing Tiles that are pinned to Start.
          foreach (var tileToUpdate in ShellTile.ActiveTiles)
          {
             // Look for a match based on the Tile's NavigationUri (tileId).
             if (tileToUpdate.NavigationUri.ToString() == tileId.ToString())
             {
                // Get the constructor for the new FlipTileData class and assign it to our variable to hold the Tile properties.
                var UpdateTileData = flipTileDataType.GetConstructor(new Type[] { }).Invoke(null);
    
                // Set the properties. 
                SetProperty(UpdateTileData, "Title", title);
                SetProperty(UpdateTileData, "Count", count);
                SetProperty(UpdateTileData, "BackTitle", backTitle);
                SetProperty(UpdateTileData, "BackContent", backContent);
                SetProperty(UpdateTileData, "SmallBackgroundImage", smallBackgroundImage);
                SetProperty(UpdateTileData, "BackgroundImage", backgroundImage);
                SetProperty(UpdateTileData, "BackBackgroundImage", backBackgroundImage);
                SetProperty(UpdateTileData, "WideBackgroundImage", wideBackgroundImage);
                SetProperty(UpdateTileData, "WideBackBackgroundImage", wideBackBackgroundImage);
                SetProperty(UpdateTileData, "WideBackContent", wideBackContent);
    
                // Invoke the new version of ShellTile.Update.
                shellTileType.GetMethod("Update").Invoke(tileToUpdate, new Object[] { UpdateTileData });
                break;
             }
          }
       }
    
    }
    
    private static void SetProperty(object instance, string name, object value)
    {
       var setMethod = instance.GetType().GetProperty(name).GetSetMethod();
       setMethod.Invoke(instance, new object[] { value });
    }
    
    

显示:
© 2015 Microsoft