【问题标题】:How do I get default colors to my default theme如何为我的默认主题获取默认颜色
【发布时间】:2017-04-13 14:22:40
【问题描述】:

这是在我的 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 中将它们绑定到颜色,但是当我在运行时更改为默认主题时,大多数颜色变为白色。每个控件(如按钮、前景、背景、文本块、复选框等)是否有默认样式?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    是的,控件已有默认外观,但您可以使用控件模板来超越这些默认外观

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

    【讨论】:

    • 我不想超出我的默认外观。当我选择我的 DefaultTheme 时,我想拥有默认的 windows 标准样式。我不明白为什么我不会在我的 DefaultTheme.xaml 中获得默认样式,我已将颜色设置为 windowcolorkey 那么为什么不起作用?
    【解决方案2】:

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

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

    所以根据需要进行调整,但我所做的是从您的 defaultTheme.xaml 文件中简单地读取 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
    }
    

    【讨论】:

    • 感谢您的回答,但我认为您误解了我的意思。在运行时更改我的主题没有问题。唯一的问题是,在我的 defaultThemes.xaml 中,我已将所有颜色设置为 WindowColorKey,并且几乎所有颜色都变为白色。它一定是解决这个问题的一些简单方法
    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2017-04-02
    • 1970-01-01
    • 2019-12-13
    相关资源
    最近更新 更多