如何将默认颜色设置为默认主题

时间:2016-11-29 14:31:34

标签: c# wpf xaml

这是我的App.xaml

<Style TargetType="CheckBox" x:Key="Checkbox">
<Setter Property="BorderBrush"              Value="{DynamicResource WieoRed}" />
<Setter Property="BorderThickness"          Value="2" />
<Setter Property="VerticalAlignment"        Value="Top" />
<Setter Property="Margin"                   Value="20,15,0,0" />
<Setter Property="FontFamily"               Value="/Resources/Fonts/Source Sans Pro/#Source Sans Pro" />
<Setter Property="FontSize"                 Value="14" />
<Setter Property="HorizontalAlignment"      Value="Left" />
<Setter Property="Foreground"               Value="{DynamicResource CheckboxForegroundColor}" />
<Setter Property="Background"               Value="{DynamicResource CheckboxBackgroundColor}" />
<Setter Property="BorderBrush"              Value="{DynamicResource CheckboxBorderbrushColor}"/>

这是我的darkTheme.xaml(色彩工作正常)

<SolidColorBrush x:Key="CheckboxForegroundColor"                Color="#FFFFFFFF"/>
<SolidColorBrush x:Key="CheckboxBackgroundColor"                Color="#FF2d2d30"/>
<SolidColorBrush x:Key="CheckboxBorderbrushColor"               Color="#FFCC1517"/>

这是我的defaultTheme.xaml

<SolidColorBrush x:Key="CheckboxForegroundColor"                Color="Black"/>
<SolidColorBrush x:Key="CheckboxBackgroundColor"                Color="{DynamicResource {x:Static SystemColors.WindowColorKey}}"/>
<SolidColorBrush x:Key="CheckboxBorderbrushColor"               Color="{DynamicResource {x:Static SystemColors.WindowColorKey}}"/>
<SolidColorBrush x:Key="CheckboxIsCheckedColor"                 Color="{DynamicResource {x:Static SystemColors.WindowColorKey}}"/>

在我的DarkTheme.xaml和DefaultTheme.xaml中我只创建我的颜色并在App.xaml Iam中将它们绑定到颜色,但是当我在运行时更改为默认主题时,大多数颜色变为白色。每个控件都有默认样式,如按钮,前景,背景,文本块,复选框等吗?

2 个答案:

答案 0 :(得分:0)

是的,已经有默认查找控件,但您可以使用控件模板来覆盖这些默认外观

https://msdn.microsoft.com/en-us/library/ee230084(v=vs.110).aspx

答案 1 :(得分:0)

我玩过类似的东西并为你提供此产品。我想允许测试不同的颜色,而无需重新编译应用程序。这样,其他具有视觉色彩设计的人可以更改我正在寻找的外部文件并加载他们的配色方案。

因此,它是如何工作的,您可以使用适用于该应用程序的常规颜色方案。如果您随后读取了新的资源字典并将其合并到当前,则会添加任何新值,但如果存在现有键值,则会覆盖并应用它,而不会更改其余的设计/外观。 (或应用程序资源......)

所以根据需要进行调整,但我所做的是从XAML文件中读取的一个简单的默认Theme.xaml文件。从那里解析成资源字典。然后合并到你的资源中(通用窗口,网格,等等)。

try
{
   var strXaml = File.ReadAllText( [your defaultTheme.xaml file] );    
   var dict = (ResourceDictionary)XamlReader.Parse(strXaml);
   YourWindow.Resources.MergedDictionaries.Add(dict);
}
catch
{
   // error if invalid xaml / resource dictionary content
}