UWP应用中的自定义主题

4
我正在开发一个UWP应用程序,希望能够从一个包含颜色代码的文件中动态设置主题。
我创建的文件是一个XML文件,其节点包含映射到应用程序控件的颜色代码。
用户可以更新提供的XML文件中的颜色代码,这应该反映在应用程序中的主题更改。
我可以为此文件设置任何自定义位置,以便用户可以编辑文件内容吗?
这是否是在UWP应用程序中实现主题的正确方法?
此外,我对UWP技术还很陌生。
提前感谢您的帮助。
1个回答

14

默认情况下,UWP 应用支持两种主题 - LightDark

您可以在 App.xaml 中通过将 RequestedTheme 属性设置为其中一个值来指定应用的主题(默认设置为 Light),或者在 App 构造函数中的 App.xaml.cs 使用 RequestedTheme = ApplicationTheme.Light; 进行设置(稍后更改会导致引发异常)。

如果您不设置 RequestedTheme 属性,则该属性将反映在任何运行周年更新及以上版本的 W10 手机设备或 W10 PC 上设置的主题,而在旧版 Windows 10 桌面版本上则为 Light

您还可以设置任何特定的 FrameworkElement 的主题,它默认设置为 ElementTheme.Default,因此继承其父级的主题。

<StackPanel RequestedTheme="Light">
   <TextBlock>Text using light theme.</TextBlock>
   <TextBlock RequestedTheme="Dark">Text using dark theme.</TextBlock>
</StackPanel>

对于颜色自定义,通常在“设置”应用中用户指定的强调色是UWP中使用的。

如果要反映在“设置”应用程序中设置的主题和强调颜色以指定某个元素的自定义颜色,必须使用ThemeResource。您可以使用预定义的XAML主题资源,例如,在Light主题中,此边框的背景颜色将为#FFFFFFFF,而在Dark主题中,背景颜色将为#FF000000

<Border Background="{ThemeResource SystemControlBackgroundAltHighBrush}"/>

或者您可以使用SystemControlBackgroundAccentBrush,它将反映在“设置”应用程序中选择的强调颜色。

您还可以编写自己的主题字典,指定每个主题的颜色。以下是一个简单主题字典的示例:

<ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Light">
        <SolidColorBrush x:Key="MyButtonBackgroundThemeBrush" Color="White"/
        <SolidColorBrush x:Key="MyButtonForegroundThemeBrush" Color="Black"/>
    </ResourceDictionary>
    <ResourceDictionary x:Key="Dark">
        <SolidColorBrush x:Key="MyButtonBackgroundThemeBrush" Color="Black"/>
        <SolidColorBrush x:Key="MyButtonForegroundThemeBrush" Color="White"/>
    </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

您可以像这样使用它:

<Button Content="Themed button"
        Background="{ThemeResource MyButtonBackgroundThemeBrush}"
        Foreground="{ThemeResource MyButtonForegroundThemeBrush}"/
        />

按钮在 Light 主题下的背景颜色将为White,前景色将为Black;在 Dark 主题下的背景颜色将为Black,前景色将为White

你可以在这里了解更多关于ThemeResource、主题、HighContrast主题和默认主题资源的信息。

此外,我建议你观看这个视频,其中讲解了 XAML 主题,甚至包括HighContrast主题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接