UWP 应用程序中的自定义主题
Custom Themes in UWP Application
我正在开发一个 UWP 应用程序,我想在其中从文件(包含颜色代码)动态设置主题。
我创建的文件是一个 XML 文件,其节点包含映射到应用程序控件的颜色代码。
用户可以在提供的 XML 文件中更新颜色代码,这应该反映应用程序中的主题变化。
我可以为此文件设置任何自定义位置,以便用户可以编辑文件的内容吗?
这是在 UWP 应用程序中实现主题的正确方法吗。
另外,我对UWP技术还比较陌生
提前致谢。
默认情况下,UWP 应用程序支持两个主题 - Light
和 Dark
。
您可以通过将 RequestedTheme
属性 设置为其中一个值(默认设置为 Light
)来在 App.xaml
中指定应用的主题或者在 App 构造函数中的 App.xaml.cs
中使用 RequestedTheme = ApplicationTheme.Light;
(以后在任何地方更改它都会导致抛出异常)。
如果您不设置 RequestedTheme
属性,它将在任何 W10 移动设备或 W10 PC 运行 周年更新上反映 Settings > Personalization > Colors
中设置的主题和较新的版本。在较旧的 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 通常也使用用户在 Settings > Personalization > Colors
中指定的强调色。
要反映在“设置”应用中为某些元素指定自定义颜色的主题和强调色设置,您必须使用 ThemeResource
。您可以使用预定义的 XAML 主题资源,例如此边框的背景颜色在 Light
主题中为 #FFFFFFFF
,在 Dark
主题中为 #FF000000
。
<Border Background="{ThemeResource SystemControlBackgroundAltHighBrush}"/>
或者您可以使用 SystemControlBackgroundAccentBrush
,它将反映在“设置”应用中选择的强调色。
您也可以编写自己的 theme dictionary
来指定每个主题的颜色。这是一个简单的主题词典的例子:
<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
主题和默认主题资源 here。
此外,我建议您观看第 9 频道的 this 视频,其中对 XAML 主题进行了解释,即使使用 HighContrast
主题也是如此。
我正在开发一个 UWP 应用程序,我想在其中从文件(包含颜色代码)动态设置主题。
我创建的文件是一个 XML 文件,其节点包含映射到应用程序控件的颜色代码。
用户可以在提供的 XML 文件中更新颜色代码,这应该反映应用程序中的主题变化。
我可以为此文件设置任何自定义位置,以便用户可以编辑文件的内容吗?
这是在 UWP 应用程序中实现主题的正确方法吗。
另外,我对UWP技术还比较陌生
提前致谢。
默认情况下,UWP 应用程序支持两个主题 - Light
和 Dark
。
您可以通过将 RequestedTheme
属性 设置为其中一个值(默认设置为 Light
)来在 App.xaml
中指定应用的主题或者在 App 构造函数中的 App.xaml.cs
中使用 RequestedTheme = ApplicationTheme.Light;
(以后在任何地方更改它都会导致抛出异常)。
如果您不设置 RequestedTheme
属性,它将在任何 W10 移动设备或 W10 PC 运行 周年更新上反映 Settings > Personalization > Colors
中设置的主题和较新的版本。在较旧的 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 通常也使用用户在 Settings > Personalization > Colors
中指定的强调色。
要反映在“设置”应用中为某些元素指定自定义颜色的主题和强调色设置,您必须使用 ThemeResource
。您可以使用预定义的 XAML 主题资源,例如此边框的背景颜色在 Light
主题中为 #FFFFFFFF
,在 Dark
主题中为 #FF000000
。
<Border Background="{ThemeResource SystemControlBackgroundAltHighBrush}"/>
或者您可以使用 SystemControlBackgroundAccentBrush
,它将反映在“设置”应用中选择的强调色。
您也可以编写自己的 theme dictionary
来指定每个主题的颜色。这是一个简单的主题词典的例子:
<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
主题和默认主题资源 here。
此外,我建议您观看第 9 频道的 this 视频,其中对 XAML 主题进行了解释,即使使用 HighContrast
主题也是如此。