2009-12-02 66 views
24

我正在为应用程序创建一些带有所有样式的wpf资源字典!我有几个LinearGradientBrush es,其中颜色直接在L inearGradientBrush参考中设置为GradientStop s。不过,我想有一组预定义的颜色,我可以使用AA参考每个GradientStop,因此,改变应用程序的配色方案是改变SolidColorBrush ES的值的问题:使用StaticResource SolidColorBrush定义渐变停止颜色

<SolidColorBrush Color="#5A5A5A" x:Key="colorbrushMedium" /> 
<SolidColorBrush Color="#222222" x:Key="colorbrushDark" /> 


<LinearGradientBrush> 
    <GradientStop Color="{StaticResource colorbrushMedium}"/> 
    <GradientStop Color="{StaticResource colorbrushDark}" Offset="1"/> 
</LinearGradientBrush> 

随着上面的代码示例,我得到以下错误:

Cannot convert the value in attribute 'Color' to object of type 'System.Windows.Media.Color'. '#5A5A5A' is not a valid value for property 'Color'. 

它指的是该生产线是其中<GradientStop Color="{StaticResource colorbrushMedium}"/>定义的行。

任何想法?

回答

29

好吧,我发现这个问题:

使用颜色和不是的SolidColorBrush ..

<Color x:Key="colorbrushMedium">#FF5A5A5A</Color> 
<Color x:Key="colorbrushDark">#FF222222</Color> 
<LinearGradientBrush> 
    <GradientStop Color="{StaticResource colorbrushMedium}"/> 
    <GradientStop Color="{StaticResource colorbrushDark}" Offset="1"/> 
</LinearGradientBrush> 

这似乎解决我的问题!

+0

你甚至可以写静态类的颜色而不是十六进制代码中定义的颜色,例如灰色。 – Florian 2012-05-09 13:32:13

+4

如果您还需要为需要SolidColorBrush的属性使用相同的颜色,该怎么办? – redtetrahedron 2014-01-13 15:59:28

7

使用Binding引用的颜色都在SolidColorBrushLinearGradientBrush

<SolidColorBrush x:Key="stop1" Color="#FF5A5A5A"/> 
<SolidColorBrush x:Key="stop2" Color="#FF222222"/> 

<LinearGradientBrush x:Key="gradient"> 
    <GradientStop Color="{Binding Source={StaticResource stop1},Path=Color}" Offset="0"/> 
    <GradientStop Color="{Binding Source={StaticResource stop2},Path=Color}" Offset="1"/> 
</LinearGradientBrush>