2014-02-24 55 views
0

我想改变悬停在C#上的一个按钮的背景颜色我想我几乎有它的sussed,我可能做出一些明显的明显错误......但字“颜色”用红色加下划线表示错误...“名称”颜色“在当前上下文中不存在”...这是我迄今为止的代码;更改c中按钮的背景颜色#

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

任何帮助将不胜感激!在此先感谢

回答

0

在你的代码的顶部添加此语句:

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

顺便说一句,你可以使用“发件人”,而不是“gas_button”:

sender.BackgroundColor = red; 

通过这种,您的代码变得更简单。

(对不起,如果你知道这一点)

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是真实的。 IsMouseOver是一个DependencyProperty,因此触发器可以在值发生更改时订阅通知,这就是整个事情的工作方式。

与此代码的障碍是它实际上不会工作!原因是标准的Button有一些更复杂的规则,使它看起来像一个真正的Windows按钮。这可以适用于大多数其他控件或属性,但不适用于按钮背景。为了解决这个问题,我们必须重写Button的ControlTemplate并强制它呈现一个边框,它是我们的Background属性的颜色。这是一个有点太多进入这里,但这个问题解决了这一问题: 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外观与实际功能代码分开的好方法。