4

次のコードを使用してカスタム ユーザー コントロールを取得し、そこからビットマップを作成し、WP8 ライブ タイル用に分離ストレージに保存します。

public static void UpdateTile()
{
    var frontTile = new LiveTileRegular(); // Custom Control
    frontTile.Measure(new Size(173, 173));
    frontTile.Arrange(new Rect(0, 0, 173, 173));

    var bmp = new WriteableBitmap(173, 173);
    bmp.Render(frontTile, null);
    bmp.Invalidate();

    const string filename = "/LiveTiles/LiveTileRegular.jpg";

    using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!isf.DirectoryExists("/LiveTiles"))
        {
            isf.CreateDirectory("/LiveTiles");
        }

        using (var stream = isf.OpenFile(filename, FileMode.OpenOrCreate))
        {
            bmp.SaveJpeg(stream, 173, 173, 0, 100);
        }

        Debug.WriteLine("Image Exists: " + (isf.FileExists(filename) ? "Yes" : "No")); // Displays "Yes"
    }

    ShellTile.ActiveTiles.First().Update(new FlipTileData
    {
        Title = "Title",
        BackgroundImage = new Uri("isostore:" + filename, UriKind.Absolute),
    }); // Throws a NotSupportedException
}

非常に説明のつかないメッセージでメソッドNotSupportedExceptionにスローされます。ShellTile.ActiveTiles.First().Update()

私が明らかに間違っていることはありますか?

4

2 に答える 2

11

ShellTile.ActiveTiles.First().Update()「TargetInnvocationException」例外は、実際には、UI スレッドから移動した後に見つかった「NotSupportedException」例外の根本的な問題を隠していました。

例外はまだ問題の内容を説明するものではありませんでしたが、さまざまなフォーラムやドキュメントを調べた結果、ライブ タイルで使用する場合、動的に作成された画像のパスが非常に重要であることがわかりました。

ライブ タイルまたはシェル タイルの目的で分離ストレージ内の画像を使用している場合、ベース フォルダーは次の場所にある必要があります。

/共有/シェルコンテンツ

変更後

const string filename = "/LiveTiles/LiveTileRegular.jpg";

const string filename = "/Shared/ShellContent/LiveTileRegular.jpg";

すべてがうまくいきました。

私たち Windows Phone 開発者は、より優れた例外メッセージを取得できますか?!? :)

于 2013-03-23T17:18:36.287 に答える
0

ShellTile.ActiveTiles .First (orDefault) はアプリケーション タイルであり、セカンダリ ピン タイルではないと思います。Skip(1) を使用して、2 番目のタイルから Update を呼び出してみてください。

于 2013-03-22T20:48:47.357 に答える