2016-09-16 67 views
1

我正在开发UWP应用程序,其中我想从文件(包含颜色代码)动态设置主题。UWP应用程序中的自定义主题

我创建的文件是一个XML文件,其节点包含映射到应用程序控件的颜色代码。

用户可以更新提供的XML文件中的颜色代码,这应该反映应用程序中的主题更改。

我可以为此文件设置任何自定义位置,以便用户可以编辑文件的内容吗?

这是在UWP应用程序中实现主题的正确方法。

此外,我在UWP技术中颇为新颖。

在此先感谢。

回答

5

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

您可以通过RequestedTheme属性设置为任意的一个值(它被默认设置为Light),或在应用程序构造App.xaml.cs使用RequestedTheme = ApplicationTheme.Light;(改变它的任何地方以后将导致异常指定的App.xaml您的应用程序的主题被抛出)。

如果您未设置RequestedTheme属性,它将反映任何运行Anniversary更新和更新版本的W10移动设备或W10 PC上的Settings > Personalization > Colors中设置的主题。在较旧的Windows 10桌面版本中,它将是Light

您还可以设置默认设置为ElementTheme.Default的任何特定FrameworkElement的主题,以便从其父项继承主题。

<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}"/ 
     /> 

按钮的背景将是White和前景将是BlackLight主题而BlackWhiteDark主题。

您可以阅读有关ThemeResource,主题,HighContrast主题和默认主题资源here的更多信息。

另外,我建议您观看第9频道的this视频,即使使用HighContrast主题,XAML主题的解释也在哪里。

相关问题