使用来自控件的动态图像为WP8创建实时磁贴会抛出“NotSupportedException”

时间:2013-03-22 20:30:41

标签: c# windows-phone-8 isolatedstorage live-tile dynamic-image-generation

我正在使用以下代码来获取自定义用户控件,从中创建一个位图,然后将其保存到隔离存储中以用于WP8 Live Tile。

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()

有什么东西我显然做错了吗?

2 个答案:

答案 0 :(得分:11)

" TargetInnvocationException"异常实际上隐藏了" NotSupportedException"的基本问题。将ShellTile.ActiveTiles.First().Update()移出UI线程后我发现的异常。

这个例外对于问题仍然没有描述性,但经过不同论坛和文档的翻版后,我发现动态创建的图像的路径在与Live Tiles一起使用时非常重要。

如果您在隔离存储中使用图像以用于实时图块或外壳图块,则基本文件夹必须

<强> /共享/ ShellContent

更改后

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

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

一切都很好。

我们的Windows Phone开发人员可以获得更好的异常消息吗?!? :)

答案 1 :(得分:0)

我相信ShellTile.ActiveTiles。首先(orDefault)是应用程序磁贴,而不是辅助固定磁贴。尝试使用Skip(1)从第二个图块调用Update。