Подтвердить что ты не робот

Использование StaticResource SolidColorBrush для определения цветов градиента Stop

Я создаю некоторые словари ресурса wpf со всеми стилями для приложения! У меня есть несколько LinearGradientBrush es, где цвет устанавливается непосредственно в ссылке L inearGradientBrush как GradientStop s. Тем не менее, я хочу иметь предопределенный набор цветов, которые я могу использовать ссылку для каждого GradientStop, так что изменение цветовой схемы для приложения связано с изменением значений SolidColorBrush es:

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

Любые идеи?

4b9b3361

Ответ 1

Хорошо, я нашел проблему:

Использование цвета, а не 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>

Это, похоже, решает мою проблему!

Ответ 2

Используйте Binding для указания цвета как в SolidColorBrush, так и в 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>