【问题标题】:Creating a live tile with the Iconic Tile Template使用标志性磁贴模板创建动态磁贴
【发布时间】:2013-11-25 14:45:28
【问题描述】:

我正在尝试使用标志性磁贴模板在我的 Windows Phone 8 应用程序中创建辅助动态磁贴,但在创建磁贴时出现异常。我得到的例外是:

“System.InvalidOperationException”类型的第一次机会异常 发生在 Microsoft.Phone.ni.dll 中

附加信息:initialData 只能是类型 标准瓦片数据。

我用来创建动态磁贴的方法是:

public void PinLock(Lock item)
{
    Uri smallIcon = new Uri(item.IsLocked ? LockedIcon : UnlockedIcon, UriKind.Relative);
    Uri largeIcon = new Uri(item.IsLocked ? LockedIcon : UnlockedIcon, UriKind.Relative);

    var tileData = new IconicTileData
    {
        IconImage = largeIcon,
        SmallIconImage = smallIcon,
        Title = item.Name
    };
    string tileUri = "/MainPage.xaml?Action=LockDetails&LockId=" + item.Id;
    ShellTile.Create(new Uri(tileUri, UriKind.Relative), tileData);
}

我在 WMAppManifest.xml 中设置了动态磁贴类型,如下所示:

<PrimaryToken TokenID="MyToken" TaskName="_default">
<TemplateIconic>
    <SmallImageURI IsRelative="true" IsResource="false">Assets\lock-icon.png</SmallImageURI>
    <Count>0</Count>
    <IconImageURI IsRelative="true" IsResource="false">Assets\lock-icon.png</IconImageURI>
    <Title>Locky</Title>
    <Message>
    </Message>
    <BackgroundColor>
    </BackgroundColor>
    <HasLarge>false</HasLarge>
    <LargeContent1>
    </LargeContent1>
    <LargeContent2>
    </LargeContent2>
    <LargeContent3>
    </LargeContent3>
    <DeviceLockImageURI IsRelative="true" IsResource="false">
    </DeviceLockImageURI>
</TemplateIconic>
</PrimaryToken>
</Tokens>

我找不到任何正确方法的好例子,而且我在互联网上找不到任何其他人遇到此异常消息。

我尝试过的其他事情:

  • 首先使用 StandardTemplateTileData 创建辅助模板 然后当我更新它时尝试使用 IconicTileData。这会抛出一个 例外。
  • 首先使用创建辅助模板 StandardTemplateTileData,然后将其删除并替换为 一个使用 IconicTileData。这不起作用(抛出相同的异常 同上)

非常感谢任何帮助或好的示例。

【问题讨论】:

    标签: c# windows-phone-8 secondary-live-tile


    【解决方案1】:

    答案是你的例外。在开始屏幕上创建附加图块时,只能使用派生自 StandardTileData 的类。这将您限制为该类或其一个派生实现FlipTileDataIconicTileDataCycleTileData 派生自较低级别的 ShellTitleData。这个类也是 StandardTileData 的基础。

    可以在MSDN documentation 上找到一些创建 FlipTileData 的示例,但由于它与上面的示例派生自同一个基类,因此您可能只需更改类名并修补您的 XML一点点。

    【讨论】:

    • 我正在使用 IconicTileData(请参阅上面的代码示例),但我仍然遇到此异常。如果我没有使用派生自 ShellTileData 的类,那么我想我会得到一个编译时异常;)
    • 你没有仔细阅读。一方面,编译时间和运行时间是两种不同的野兽。您的应用程序在安装时也可能使用 ShellTile.Create 来创建其应用程序磁贴。但是,对于在应用程序运行时将磁贴固定到开始屏幕,代码可能有一个限制,即磁贴必须从 StandardTileData 派生,而不是 ShellTileData,这正是您的异常状态。
    • 好的,现在我明白你的意思了。 Iconic Tile 模板仅适用于您的应用程序主磁贴,不适用于辅助磁贴。谢谢你澄清这一点。文档和 API 肯定没有说清楚。虽然一旦您知道异常错误消息更有意义;)
    • @LukeFoust 进一步阅读后的一件事。看来您也可以选择直接使用 StandardTileData 而不是翻转派生类。它不是一个抽象的实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多