#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: Итак, какой у вас остается вопрос?