стиль xaml — как изменить цвета на ключе

#wpf #xaml #styles #dynamicresource

Вопрос:

Ниже у меня есть кисти разных цветов.

 <!-- SolidColorBrush -->
<SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/>
 

Которые я хочу изменить на красные, для отрицательной кнопки. Т. е. не статические, а переключающие их. Не во время выполнения, (сначала) на основе некоторого значения..

fx: int I = 0;

 <!-- SolidColorBrush -->
<SolidColorBrush x:Key="Button.Static.Background" Color="Red"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="DarkRed/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="LightRed"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#Red"/>
 

I == 1

 <!-- SolidColorBrush -->
<SolidColorBrush x:Key="Button.Static.Background" Color="Yellow"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="DarkYellow"/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="LightYellow"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#Yellow"/>
 

I == 2

 <!-- SolidColorBrush -->
<SolidColorBrush x:Key="Button.Static.Background" Color="Green"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="DarkGreen"/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="LightGreen"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#Green"/>
 

Должен быть какой-то разумный способ установить цвета по умолчанию, а не ограничиваться одним стилем кнопки… таким образом, я могу связать различные цвета, используемые в xaml, для создания разных стилей кнопок..

У кого есть идея, не стесняйтесь делать комментарии..

Ответ №1:

Вы можете динамически заменять ресурс:

 Resources["Button.Static.Background"] = Brushes.Yellow;
 

Чтобы это повлияло на любой элемент, который в настоящее время ссылается на этот ресурс, вам необходимо ссылаться на него с помощью расширения DynamicResource разметки:

 <TextBlock Text="Test" Foreground="{DynamicResource Button.Static.Background}" />
 

Button Шаблон по умолчанию не используется DynamicResource , поэтому вы не можете изменить цвета кнопки, не изменив шаблон, например, заменив StaticResource на DynamicResource .

Комментарии:

1. Я думаю, что мне бы очень хотелось использовать ключ с каталогом цветов, то есть красный, зеленый,желтый. а затем чанинг с группами цветов..

2. Вы можете поместить все связанные ресурсы в a ResourceDictonary , а затем заменить этот на другой, чтобы изменить цвет.

3. Это именно то, что я сделал, и правильный способ сделать это (я думаю)

4. @kfn: Итак, какой у вас остается вопрос?