【问题标题】:Grid background flickering (Metro app)网格背景闪烁(Metro 应用程序)
【发布时间】:2012-05-07 19:45:25
【问题描述】:

我有一个背景定义为 XAML 中的 ImageBrush 的网格。图像非常大(大约 1 MB,jpg)。当我导航到页面时,首先显示大约一秒钟的黑色背景,然后加载背景图像。它看起来不太好。如何解决这个问题?也许一些图像缓存或将图像加载到内存中?

编辑:图像为 2560x1600,因为该应用应支持最高分辨率。有没有办法检测屏幕分辨率并使用适当的图像? 我还在 Windows 8 博客上阅读了一篇关于缩放图像的文章,但我找不到任何它是如何工作的示例。这个想法是,1366x768 为 100%、1920x1080 为 140% 和 2560x1600 为 180% 的背景,系统会根据用户的分辨率选择正确的背景吗?

【问题讨论】:

  • 查看我的更新答案以获取更多信息。

标签: c# xaml windows-8 windows-runtime winrt-xaml


【解决方案1】:

我之前在 MSDN 上问过 similar question,但没有得到普遍有用的答案。如果您希望能够转到任何页面并立即看到图像 - 您需要在导航之前加载它。如果您想避免闪烁 - 您可以将画笔的不透明度设置为 0 并等待 ImageBrush 上的 ImageOpened 事件,然后再将不透明度设置回 1.0 以实现平滑的淡入过渡。

编辑*

WinRT XAML Toolkit 的最新版本有一个附加属性 (ImageExtensions.FadeInOnLoaded),您可以在图像加载时使用它来淡入图像,这应该比在加载时简单地显示要好得多。也有样品。

要处理多个图像比例 - 您需要名称为 SplashScreen.scale-100.png、SplashScreen.scale-140.png、SplashScreen.scale-180.png 的图像,然后将图像源设置为 SplashScreen.png - 分辨率的正确图像将自动被拾取。有关详细信息,请参阅此msdn article

【讨论】:

    【解决方案2】:

    您可以生成缩略图而不是 1 mb 的图像

    【讨论】:

    • 不是一个选项,应用程序必须在 2560x1600 上看起来很神,并且背景必须为 1mb jpg
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多