2011-03-30 85 views
22

我在ResourceDictionary中设置了一个SolidColorBrush和LinearGradientBrush资源的加载。我使用这些,因为我正在重新编制几个控件以供我们的应用程序使用。如何将另一个资源(SolidColorBrush)指向另一个

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

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

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

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

...或者是这种不可能的事情,在这种情况下,我必须去简单地做一个查找/替换和替换我的画笔名与新的画笔名称?

由于提前,

AT

回答

29

我同意雷切尔说,但如果你有它的基础上现有的SolidColorBrush,你可以做到以下几点:

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

注意这只是工程的“颜色”属性,你必须为您需要的每个属性单独执行。

+0

太棒了!现在我真的可以开始像我想要的级联。 – 2013-04-19 12:49:29

+2

完美,这是我一直在寻找的谢谢。我可能会指出你错过了大括号;-) – user2109254 2016-02-13 02:56:17

8

通常我做一个静态颜色属性在一个地方,就有我刷绑定到该颜色。

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

如果这是在另一个文件中引用,它可能会强调它,因为它找不到静态资源,但在运行时它会仍然编译提供包含您的画笔定义的主资源文件被加载。

+1

自2011年以来是否更改过此功能?我得到一个错误“System.Windows.Media.SolidColorBrush类型的对象不能应用于需要类型System.Windows.Media.Color的属性”,它与上面的示例完全相同(即渐变停止) 。 – Grim 2016-03-03 23:08:24

+0

@Grim如果你用你正在使用的XAML创建一个单独的问题,可能是最好的。我不认为有任何改变,但我可能是错的。 – Rachel 2016-03-04 15:07:01

+0

是的,它似乎没有工作,不幸的是分配一个solidColorBrush颜色属性。至少设计师抱怨并拒绝在更改参考颜色时更新颜色。 – David 2017-06-06 17:59:54

相关问题