如何将一个资源(SolidColorBrush)指向另一个资源

时间:2011-03-30 13:30:31

标签: wpf resources styles resourcedictionary

我在ResourceDictionary中设置了一个SolidColorBrush和LinearGradientBrush资源。我使用这些,因为我重新设计了几个控件,用于我们的应用程序。

现在我有一堆其他外部画笔,我必须使用它们来改变我们的应用程序。这些也在ReseourceDictionary中设置。

是否可以将我的画笔资源指向另一个字典中的新资源,类似于样式的“BasedOn”属性?

这样的事情,至少在概念上是这样的:

<SolidColorBrush x:Key="MyDataGridHeaderBrush" Binding="HeaderBrushDefinedElsewhere"/>

......或者这种事情是不可能的,在这种情况下我只需要进行查找/替换并用新的刷子名称替换所有刷子名称?

提前致谢,

AT

2 个答案:

答案 0 :(得分:37)

我同意Rachel的说法,但是如果你必须将它建立在现有的SolidColorBrush上,你可以使用以下方法:

<SolidColorBrush x:Key="MyDataGridHeaderBrush" 
                 Color="{Binding Source={StaticResource HeaderBrushDefinedElsewhere}, Path=Color}"/>

请注意,这只适用于“颜色”属性,您必须为所需的每个属性单独执行此操作。

答案 1 :(得分:10)

通常我在一个地方做一个静态Color属性,并让我的画笔绑定到那个颜色。

<SolidColorBrush x:Key="LightColor" Color="#C5DBF6"/>
<SolidColorBrush x:Key="DarkColor" Color="#FF8DB2E3"/>

<LinearGradientBrush x:Key="FadeOutRight" EndPoint="1,1" StartPoint="0,0">
        <GradientStop Color="{Binding Source={StaticResource LightColor}, Path=Color}" Offset="0" />
        <GradientStop Color="{Binding Source={StaticResource DarkColor}, Path=Color}" Offset="1"/>
</LinearGradientBrush>

您还可以将其他SolidBrushColors绑定到此:

<SolidColorBrush Color="{Binding Source={StaticResource LightColor}, Path=Color}" />

如果在另一个文件中引用它,它可能会为它加下划线,因为它找不到静态资源,但在运行时它仍然会编译,提供包含刷子定义的主资源文件已加载。