在c#中更改按钮的背景颜色

时间:2014-02-24 15:39:16

标签: c# wpf

我正试图在C#中悬停时改变按钮的背景颜色我觉得我差点把它搞砸了,我可能会犯一些明显的错误......但是“颜色”字样用红色加下划线错误......“当前上下文中不存在'Colors'这个名称”......这是我到目前为止的代码;

private void gas_button_MouseEnter(object sender, RoutedEventArgs e)
{
    SolidColorBrush red = new SolidColorBrush(Colors.Red);
    gas_button.Background = red;    
}

任何帮助将不胜感激!提前致谢

2 个答案:

答案 0 :(得分:1)

从您解决此问题的方式来看,您感觉自己来自WinForms或其他GUI库背景。

WPF的许多优点之一是,您可以通过定义Button(或任何其他控件)的样式来解决这类问题,该样式可实现您的目标外观,而无需编写任何实际代码!看看下面的按钮声明:

<Button Content="Test">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="Green"/>                
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

这为我们定义了一个按钮,并覆盖了默认按钮样式以将背景设置为绿色,并定义了一个触发器,当IsMouseOver为true时,该触发器将背景设置为红色。 IsMouseOver是一个DependencyProperty,因此触发器可以在值发生变化时订阅通知,这就是整个过程的工作方式。

使用此代码的障碍是它实际上无法正常工作!原因是标准Button有一些与之相关的更复杂的规则,使它看起来像一个真正的Windows按钮。这适用于大多数其他控件或属性,但不适用于按钮背景。要解决这个问题,我们必须覆盖Button的ControlTemplate并强制它渲染一个Border属性的边框。这里有点太多了,但这个问题解决了这个问题: How do you change Background for a Button MouseOver in WPF?

最终代码:

<Button Content="Test">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="Green"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

这种样式是WPF的目的。它允许您为应用程序构建完全基于标记的非常复杂和奇特/交互式的外观。您可以将它们存储在主题文件中,并使用它们来覆盖应用程序的整体外观。它非常强大,是将UI外观与实际功能代码分离的好方法。

答案 1 :(得分:0)

在代码顶部添加此语句:

//import...oops! I like VB better, and I usualy use VB.  Sorry.
using System.Windows.Media;

顺便说一句,您可以使用“sender”代替“gas_button”:

sender.BackgroundColor = red;

通过使用它,您的代码变得更加简单。

(对不起,如果你知道的话)