如何在WPF中使用动态主题颜色

时间:2010-06-10 12:08:35

标签: wpf color-scheme resourcedictionary

在WPF中,我有一些资源词典,其中包含我的应用程序中的面板和控件的样式。我一次又一次地重复使用相同的颜色。我实际上有5种颜色,它们给我的应用程序一个很好的配色方案。

但是,如果我不想改变主题,我必须进入RD并改变那里的每一种颜色。

我想在某个地方设置颜色,但不知道如何或在哪里。我尝试在一个RD中放置一个颜色标记,但是一旦我在相同的RD Visual Studio中引用它就崩溃了。

同样最好的解决方案是我可以将颜色作为应用程序本身的动态设置,这样用户甚至可以自己更改它。

2 个答案:

答案 0 :(得分:4)

以下代码适用于Silverlight,因此应该在WPF中工作(可能需要进行一些修改 - 我没有时间仔细检查它):

在您的资源中定义颜色:

<SolidColorBrush x:Key="MyNamedColor" Color="DarkRed"/>

然后定义一些样式:

<Style x:Key="MyTextBlockStyle" TargetType="TextBlock">
    <Setter Property="Foreground" Value="{StaticResource MyNamedColor}"/>
</Style>
<Style x:Key="MyLineStyle" TargetType="Line">
    <Setter Property="Stroke" Value="{StaticResource MyNamedColor}"/>
</Style>

然后在你的代码中(在XAML或后面的代码中)在所有TextBlocks,Lines等上使用这些样式。

然后,当您想要更改颜色时,只需更新原始的SolidColorBrush定义。

答案 1 :(得分:0)

除了ChrisF的解决方案:如果您希望它在运行时是动态的,您可以使用DynamicResource并在运行时更改资源本身。