如何在WPF中设置按钮的背景颜色?

3

如何在XAML中设置按钮的背景颜色?

这并不比设置其他属性更难。

<Button Margin="2" Background ="LightGreen" ....>

但这并不起作用...为了避免混淆,这里的button是System.Windows.Controls.Button

编辑

我忘了提到我使用DevExpress的ThemeManager,但是没有想到它会导致问题,因为根据DevExpress的说法,他们不会为标准Windows按钮设置样式...然而,显然他们确实会这样做,这基本上使得更改按钮的背景颜色变得不可能,除非进行一些重大的工作...


是的,DevExpress ThemeManager... - Matt
@给我踩的人,可以评论一下吗? - Matt
1
你能解释一下如何使用ThemeManager吗?你确定你没有改变按钮的样式或模板吗?你已经尝试过的方法是正常的做法,除非你在其他地方改变了背景。 - J. Swietek
1
@MattWolf Wolf 这个链接可能会对你有所帮助:https://www.devexpress.com/Support/Center/Question/Details/Q399125 - Thirisangu Ramanathan
@MattWolf 祝你好运 :) - Thirisangu Ramanathan
显示剩余9条评论
3个回答

8
根据文档:
DevExpress为所有WPF控件提供多个可以应用的主题,以及一些标准控件(GroupBox、ScrollViewer、Scroll、RadoiButton、Button、ListBox、Slider、TabControl、Separator、ToggleButton、RepeatButton、Label、ListBoxItem、TabItem、ToolTip等)。
可以看到这里列出了Button控件。但在文档中还指出,您可以通过将ThemeName属性设置为None来禁用单个控件的主题,因此您可以仅针对按钮或其某些父容器禁用主题并使用自己的样式。
以下是示例:
<Button Margin="2" Background="LightGreen" dx:ThemeManager.ThemeName="None" ...>

2
令人惊讶的是,快速浏览实际文档可以得到多少有用信息,你解决了我的问题。我从未查看过,因为DevExpress自己的支持论坛员工坚称这是不可能完成的。非常感谢您提供的快速和干净的解决方案。 - Matt

5

试试这个:

yourBtn.Background = new SolidColorBrush(Colors.Green);

或者在 XAML 中:

<Window.Resources>
   <SolidColorBrush x:Key="BG" Color="Green"/>
</Window.Resources>

<Button Background="{DynamicResource BG}"></Button>

我特别要求一个XAML解决方案! - Matt
Why Grid.Resources? - Matt
1
还是不行。我认为在使用DevExpress ThemeManager时存在问题。它似乎覆盖了某些东西...虽然他们强调Windows Button不是他们风格库的一部分。 - Matt
1
你的按钮是否存在于一个网格中?以调用Grid.Ressources吗? - Med.Amine.Touil
理论上,无论主题管理器是什么(xceed、devexpress等),它都应该能够正常工作。 - Med.Amine.Touil
显示剩余3条评论

0

<Button Margin="2" Background="LightGreen"/> 是有效的。如果它对你无效,可能是因为你有另一个style或样式管理器在其他地方覆盖了它。

附加信息 - 另一个答案展示了如何使用动态资源来设置单个按钮的样式。要使用资源字典为样式中的所有按钮设置背景颜色,可以使用类似以下的代码:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!--background brush-->
    <LinearGradientBrush x:Key="backgroundBrush" StartPoint="0.5,0" EndPoint="0.5,1">
        <GradientStop Color="White" Offset="0.3"/>
        <GradientStop Color="#DDDDFF" Offset="1"/>
    </LinearGradientBrush>

        <!--The style for buttons-->
        <Style TargetType="Button">
            <Setter Property="Background" Value="{StaticResource backgroundBrush}"/>
        </Style>
    </ResourceDictionary>

1
@KingKing,我不太明白你的意思?如果回答中包含完整的代码,对于未来查看此问题的人来说肯定更好(尤其是如果原始问题在某个时候被编辑过)。 - simonalexander2005
2
哈哈,讽刺,说得好。我计划在原始帖提供更多细节后进行更新 - 但是对于“如何在XAML中设置按钮的背景颜色?”这个问题,我认为一个有效的答案是<Button Margin="2" Background="LightGreen"/> - simonalexander2005
@simonalexander2005,我的问题仍然是一样的:我如何在XAML中设置颜色。我不想通过StaticResource来设置颜色。 - Matt
@MattWolf,那么<Button Margin="2" Background="LightGreen"/>应该可以工作,我不知道为什么没有看到您代码的更多细节。您是否尝试创建一个新的WPF项目,在其中放置一个按钮,使用完全相同的代码,并查看它是否有效? - simonalexander2005
1
@simonalexander2005,我发现这与DevExpress的ThemeManager有关。尽管他们强调Windows.Controls的按钮不是由他们进行样式设计的... - Matt
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接