Using a StaticResource SolidColorBrush to define the Gradient Stop Colors
Asked Answered
C

2

32

I am creating some wpf resource dictionaries with all the styles for an application! I have a few LinearGradientBrushes, where the color is set directly in the LinearGradientBrush reference as GradientStops. However, I want to have a predefined set of colors that I can use a a reference for each GradientStop, so that changing the color scheme for the application is a matter of changing the values of the SolidColorBrushes:

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


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

With the code example above, I am getting the following error:

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

The line it refers to is the line where <GradientStop Color="{StaticResource colorbrushMedium}"/> is defined.

Any ideas?

Crigger answered 2/12, 2009 at 10:20 Comment(0)
C
39

Ok, I found the problem:

Using Color and not 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>

This seems to solve my problem!

Crigger answered 2/12, 2009 at 10:34 Comment(2)
You can even write the color defined in static class Colors instead of the hex code, e.g. Gray.Giustino
What if you also need to use the same color for properties that require a SolidColorBrush?Worried
C
17

Use Binding to reference the color both in SolidColorBrush and in LinearGradientBrush:

<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>
Contrive answered 15/3, 2016 at 17:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.