【问题标题】:UWP Image sometimes not visible until after page resizeUWP 图像有时直到页面调整大小后才可见
【发布时间】:2018-08-09 01:53:58
【问题描述】:

我有一个非常标准的 UWP xaml windows 10 应用程序,它在主页上包含几个图像,我会说大约 50 个。

我已经使用 Image xaml 标记以常规方式定义图像,并指定图像的源属性以引用我的应用程序资产文件夹中的项目,

<Image Source="Assets/Image1.png"/>

我会说 75%-80% 的时间我的应用程序启动良好,所有图像都在正确的位置和正确的大小等处可见...但是有时我启动应用程序并且一些图像是不可见。通常这在 1-3 张图像之间。一旦我调整应用程序大小或触发更改图像源的事件,就会显示丢失的图像。

图像上还有一个 Tapped 事件处理程序。如果您单击图像所在的位置而看不到图像,则会调用被点击的处理程序。

我不知道是什么原因导致了这个问题。这几乎就像图像没有及时加载,或者在图像加载后 GUI 没有接收到页面刷新事件。就像我说的调整应用程序大小可以解决问题。

任何建议将不胜感激。提前感谢您的帮助。

【问题讨论】:

    标签: uwp uwp-xaml


    【解决方案1】:

    此问题通常发生在系统内存不足的情况下,因此它不会加载某些图像以降低负载。加载 50 张图片,特别是如果它们很大可能会导致这样的问题。

    将图像的CacheMode 设置为"BitmapCache" 可能会有所帮助(请参阅documentation - 对于 WPF,但比 UWP 文档更详细)。否则,我建议确保您的图像不要超过必要的大小,因为这会给机器带来不必要的压力。

    此外,您可以使用DecodePixelWidthDecodePixelHeight 属性来指定应以何种尺寸加载图像。例如,当您在缩略图区域中显示大照片时,这可能很有用。设置DecodePixel 属性将优化JPEG 和PNG 图像的加载过程,这样就不必将整张照片从磁盘加载到内存中(参见documentation)。

    更新

    根据@JohnnyWestlake 的建议,您可能需要查看documentation 以获取有关图像优化的更多提示。有多个有用的技巧可以帮助尽可能减少图像的内存占用。

    【讨论】:

    • 对于 UWP,如果在 XAML 中像上面那样加载图像,手动设置 DecodePixelHeight/Width 实际上是一个坏主意 - 因为 Windows 会自动以正确的渲染大小对其进行解码在 UWP 中。不仅如此,如果图像在任何时候变大,它会自动以新的更大尺寸重新解码。 (这也是在这种情况下调整应用大小会导致图像显示的原因 - 它已重新解码。)
    • 真的是这样吗:-O?你有链接吗?到目前为止,我还没有在文档中提出这样的提及......如果没有指定宽度和高度(拉伸),我认为即使在那时也不会进行渲染大小的解码。此外,OPs 问题似乎指向图像没有被有效解码的方向
    • @JohnnyWestlake 你是对的,现在我在文档中找到了它。 OP的场景有可能属于系统无法处理的场景之一。
    • 使用选项 CaheMode="BitmapCache" 解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多