wpf - 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中使用的不同颜色来制作不同样式的按钮......
大家有什么想法,欢迎评论。。
解决方案
您可以动态替换资源:
Resources["Button.Static.Background"] = Brushes.Yellow;
为了影响当前引用此资源的任何元素,您需要使用DynamicResource
标记扩展来引用它:
<TextBlock Text="Test" Foreground="{DynamicResource Button.Static.Background}" />
默认Button
模板不使用DynamicResource
,因此您无法在不修改模板的情况下更改按钮的颜色,例如替换StaticResource
为DynamicResource
.
推荐阅读
- angular - Firebase onDisconnect 并不总是有效,用户仍然在线
- azure - Azure 门户中访问 vm 的条件访问策略
- google-sheets - 有没有办法让一个单元格跟踪另一个单元格中记录的最大值?
- javascript - Three.js GLTFLoader 无法在我的电脑上加载 gltf 文件
- python - 有什么方法可以使这些 if 语句更简洁?
- java - 如何在没有表单标签的按钮单击时调用 post api?
- android - ALSA 设备只能在 VMWare 下的 android-x86 上作为 root 用户使用
- html - Google Chrome 中的 HTML 横幅警告消息
- r - 将 R 与 Dynamics 365 连接起来
- c++ - C++ SFML 中的碰撞检测