我创建的文件是一个XML文件,其节点包含映射到应用程序控件的颜色代码。
用户可以更新提供的XML文件中的颜色代码,这应该反映在应用程序中的主题更改。
我可以为此文件设置任何自定义位置,以便用户可以编辑文件内容吗?
这是否是在UWP应用程序中实现主题的正确方法?
此外,我对UWP技术还很陌生。
提前感谢您的帮助。
默认情况下,UWP 应用支持两种主题 - Light
和 Dark
。
您可以在 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
主题。