WPF以编程方式更改按钮悬停样式

本文关键字:按钮 悬停 样式 方式更 编程 WPF | 更新日期: 2023-09-27 18:17:38

我想为我的WPF应用程序中的按钮创建一个自定义样式。我希望能够改变他们的BackgrooundBorderThickness属性,当鼠标在他们。

一些按钮是在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"];

我在悬停时仍然得到常规的浅蓝色背景。

WPF以编程方式更改按钮悬停样式

你可以像这样创建一个通用的样式:

<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。否则它将不被应用。希望这对你有所帮助。