WPF以编程方式更改按钮悬停样式
本文关键字:按钮 悬停 样式 方式更 编程 WPF | 更新日期: 2023-09-27 18:17:38
我想为我的WPF应用程序中的按钮创建一个自定义样式。我希望能够改变他们的Backgroound
和BorderThickness
属性,当鼠标在他们。
一些按钮是在c#中动态创建的,所以我认为xaml解决方案是不够的。
我试着在c#中使用触发器和setter来实现我的目标,但是我不能让它工作,悬停的颜色总是保持浅蓝色。
下面是我创建按钮的方法:Button but = new Button()
{
Height = 40,
Background = new SolidColorBrush(Colors.Gray),
Content = new Label() {
FontSize = 13,
FontWeight = FontWeights.Medium,
Foreground = new SolidColorBrush(Colors.White)
}
}
stackPanel.Children.Add(but)
我知道这不是最好的方式来创建控件,我可能会更好地使用MVVM,但我不能改变整个应用程序,所以我只是寻找一个c#的解决方案。
谢谢!
编辑:我给App.xaml文件添加了一个样式。它看起来像这样(UpperMenuModeButton是我的控制基于常规按钮):
<Application.Resources>
<Style TargetType="UpperMenuModeButton" x:Key="UpperMenuModeButton" >
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Application.Resources>
我在创建按钮时设置样式,像这样:
this.Style = (Style) Resources["UpperMenuModeButton"];
我在悬停时仍然得到常规的浅蓝色背景。
你可以像这样创建一个通用的样式:
<Style TargetType="Button">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="FontFamily" Value="Comic Sans MS"/>
<Setter Property="FontSize" Value="14"/>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="MaxHeight"
To="90" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:1"
Storyboard.TargetProperty="MaxHeight" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style>
把这段代码放在你的按钮范围内(在它的页面或网格或容器中),它会自动工作。更多信息请看这里
编辑
关于按钮悬停事件的问题,请参阅此处
要使该样式在普通按钮上工作,您需要将TargetType设置为button。否则它将不被应用。希望这对你有所帮助。