首页 > 解决方案 > xaml 样式 - 如何在键上更改颜色

问题描述

我有下面不同颜色的刷子。

<!-- 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"/>

我 == 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"/>

我 == 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中使用的不同颜色来制作不同样式的按钮......

大家有什么想法,欢迎评论。。

标签: wpfxamlstylesdynamicresource

解决方案


您可以动态替换资源:

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

为了影响当前引用此资源的任何元素,您需要使用DynamicResource标记扩展来引用它:

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

默认Button模板不使用DynamicResource,因此您无法在不修改模板的情况下更改按钮的颜色,例如替换StaticResourceDynamicResource.


推荐阅读