我在ResourceDictionary中设置了一个SolidColorBrush和LinearGradientBrush资源。我使用这些,因为我重新设计了几个控件,用于我们的应用程序。
现在我有一堆其他外部画笔,我必须使用它们来改变我们的应用程序。这些也在ReseourceDictionary中设置。
是否可以将我的画笔资源指向另一个字典中的新资源,类似于样式的“BasedOn”属性?
这样的事情,至少在概念上是这样的:
<SolidColorBrush x:Key="MyDataGridHeaderBrush" Binding="HeaderBrushDefinedElsewhere"/>
......或者这种事情是不可能的,在这种情况下我只需要进行查找/替换并用新的刷子名称替换所有刷子名称?
提前致谢,
AT
答案 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}" />
如果在另一个文件中引用它,它可能会为它加下划线,因为它找不到静态资源,但在运行时它仍然会编译,提供包含刷子定义的主资源文件已加载。