【问题标题】:How can I use code-generated images on my WinRT live tile?如何在我的 WinRT 动态磁贴上使用代码生成的图像?
【发布时间】:2013-12-17 12:17:14
【问题描述】:

我正在尝试通过使用 BitmapRender(在 Windows 8.1 中)从用户控件创建图像来在我的应用中创建动态磁贴,然后我想将其添加为我的动态磁贴图像。

创建图像效果很好,我将它存储在应用程序的漫游文件夹中。但是,以这种方式创建时,我无法将图像添加到动态磁贴中。奇怪的是,如果我将生成的文件复制到项目中,然后尝试将其附加到它可以工作的活动磁贴(因此图像必须正确格式化/大小等);如果我将随机图像复制到我的漫游文件夹并将其设置为实时磁贴图像,它也可以工作(这意味着我可以使用漫游文件夹中的文件来设置磁贴图像)......所以这意味着我正在参考文件位置正确,并且图像本身能够在动态磁贴上使用...那为什么它不起作用?

我创建了一个示例项目(下面的链接),说明我的动态磁贴创建代码可以正常工作(使用存储在项目中的图像),并且我可以成功地从 UI 控件创建图像并将其存储在漫游文件夹(FWIW 我尝试使用不同的文件夹,但行为没有改变)。

我有什么遗漏吗?任何见解或帮助将不胜感激。

项目在 VB.net 中,但如果这样更容易,我可以在 C# 中找到答案。

Sample project to illustrate the issue

【问题讨论】:

    标签: vb.net windows-runtime windows-8.1


    【解决方案1】:

    问题是您尝试使用绝对文件路径来引用图像,这是不受支持的。如果您查看 tile 架构,特别是 page for the element,您会看到 src 必须是使用 http[s]://、ms-appx:/// 或 ms-appdata:// 的 URI /local 适用于 Windows 应用商店应用。您可以使用 /livetile.png 的相对包内路径这一事实有点侥幸,因为它默认为 ms-appx:///livetile.png。

    那么,您需要做的就是将其用作文件路径:

    filepath = "ms-appdata:///local/livetile.png"
    

    我在您的示例中进行了尝试,效果很好。请注意,此处仅支持本地文件夹,不支持漫游。这主要是因为漫游应用程序数据一开始就被限制在 100K 以内,并且将平铺图像放入其中通常会很快填满您的配额。然后,您需要在每台设备上本地生成图像(这也很有意义,因为您可以将当前缩放考虑在内)。

    【讨论】:

    • 克雷格,感谢您的回复。我实际上是在周末想通了这一点,但没有抽出时间在这里更新。除了需要使用本地文件夹之外,还有一个问题 - 如果您在短时间内进行大量更改(这在测试代码时很常见),Windows 似乎会停止更新磁贴。
    • 我相信它内置了一种用于快速更新的去抖动算法。测试时最好的办法是确保在发布更新之前清除磁贴,因为这应该会显示最新的更新。
    • 不幸的是,我先清除了瓷砖。它让我可以更改几次,然后停止更新。现在我知道问题出在哪里,这没什么大不了的,但在测试过程中非常令人沮丧!
    • 我写了一篇详细的博客文章,其中包含一个示例项目,供遇到同样问题的任何人使用。在 WinRT 应用程序中拥有它是一件非常重要的事情,但实施起来非常棘手。此技术仅适用于 Windows 8.1;我仍在尝试在 Windows 8.0 上找到一种方法...Creating Dynamic Live Tiles from UI Controls in Windows 8.1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多