我正试图在C#中悬停时改变按钮的背景颜色我觉得我差点把它搞砸了,我可能会犯一些明显的错误......但是“颜色”字样用红色加下划线错误......“当前上下文中不存在'Colors'这个名称”......这是我到目前为止的代码;
private void gas_button_MouseEnter(object sender, RoutedEventArgs e)
{
SolidColorBrush red = new SolidColorBrush(Colors.Red);
gas_button.Background = red;
}
任何帮助将不胜感激!提前致谢
答案 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;
通过使用它,您的代码变得更加简单。
(对不起,如果你知道的话)