【问题标题】:Dark/Light theme assets qualifiers深色/浅色主题资产限定符
【发布时间】:2016-03-09 17:22:05
【问题描述】:

我对使用浅色/深色主题图像有一个非常简单的要求。我希望像

这样的限定词
SomeImage.Theme-Light.png

或将图像放在名为 Theme-Light 的文件夹下

Theme-Light/SomeImage.png

可以,而且确实可以,但仅限于设计器模式。一旦我运行应用程序,即使正确设置了所需的主题(在应用程序和页面级别,因此所有其他 ThemeResources 都正确加载),但会加载错误的图像。

我知道为不同主题加载不同图像的解决方法,所以这不是我想要的。我很想知道为什么这种带有限定符的方法在运行时不起作用?是否应该使用不同的名称限定符?

我读过这篇文章:“How to name resources using qualifiers (XAML)",但它只显示了如何为支持高对比度的资产命名。

【问题讨论】:

  • 我自己在闪屏图像中遇到了这个问题。我想要 WP10 上深色主题的白色图标,而白色主题的另一个颜色图标
  • 使用“对比白”和“对比黑”应该是要走的路,即使例如Groove Music 使用这种方法。它在我的应用程序中运行良好,唯一的例外是启动画面。
  • @sibbl 感谢您的建议,但除非打开高对比度,否则这不起作用。文件名是(例如,比例 150):LogoWithName.scale-150_contrast-black.png。你确定没有设置其他东西来让它工作吗?

标签: c# xaml win-universal-app


【解决方案1】:

这种方法不如限定符方便,但它有效。

在 App.xaml 中定义

<ResourceDictionary>
    <ResourceDictionary.ThemeDictionaries>
        <ResourceDictionary x:Key="Light">
            <ImageSource x:Key="Logo">/Assets/Logo-White.png</ImageSource>
        </ResourceDictionary>

        <ResourceDictionary x:Key="Dark">
            <ImageSource x:Key="Logo">/Assets/Logo-Blue.png</ImageSource>
        </ResourceDictionary>

        <ResourceDictionary x:Key="HighContrast">
            <ImageSource x:Key="Logo">/Assets/Logo-White.png</ImageSource>
        </ResourceDictionary>
    </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>

然后使用

<Image Source="{ThemeResource Logo}"/>

【讨论】:

    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2012-04-28
    • 2021-12-21
    • 2020-05-24
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多