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

时间:2016-11-13 17:47:04

标签: c# wpf button

我想在WPF应用程序中为按钮创建自定义样式。我希望能够在鼠标悬停时更改BackgrooundBorderThickness属性。

有些按钮是用c#动态创建的,所以我不认为xaml解决方案就足够了。

我尝试在c#中使用触发器和设置器来实现我的目标,但是我无法使其工作,悬停颜色始终保持浅蓝色。

以下是我创建按钮的方式:

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,但我无法更改整个应用程序,所以我只是在寻找ac#解决方案。

谢谢!

编辑:

我在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"];

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

2 个答案:

答案 0 :(得分:1)

您可以创建如下的常规样式:

<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>

将此代码放在按钮的范围内(在其页面或网格或容器中),它将自动运行。 有关详细信息,请参阅here

修改

有关按钮悬停事件的问题,请参阅here

答案 1 :(得分:0)

要使该样式处理普通按钮,您需要将TargetType设置为Button。否则将不会应用。希望这可以帮助。