xaml 样式 - 如何在键上更改颜色

Posted

技术标签:

【中文标题】xaml 样式 - 如何在键上更改颜色【英文标题】:xaml style - how to make colors change on key 【发布时间】:2021-08-06 18:38:25 【问题描述】:

我有下面不同颜色的画笔。

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

我想将其更改为红色,用于否定按钮。 IE。不是静态的,而是切换它们。不是在运行时,(起初)基于某个值..

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

任何人有想法,请随时发表评论..

【问题讨论】:

【参考方案1】:

您可以动态替换资源:

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

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

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

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

【讨论】:

我在想,我真正喜欢的是使用带有颜色目录的键。即红色,绿色,黄色。然后改变颜色组.. 您可以将所有相关资源放在ResourceDictonary 中,然后将其替换为另一个以更改颜色。 这正是我所做的,也是正确的做法(我认为) @kfn:那你还有什么问题?

以上是关于xaml 样式 - 如何在键上更改颜色的主要内容,如果未能解决你的问题,请参考以下文章

xaml - 如何更改应用程序中所有文本的颜色

如何遍历一组颜色以更改键上的背景(按下/按下)

如何使用来自不同 xaml 文件的样式

如何自定义TimePicker的样式

JSON.stringify() 在值上带有单引号,在键上没有引号

如何更改 Metro 应用程序的 XAML/C# 中单选按钮的样式?