我想在WPF应用程序中为按钮创建自定义样式。我希望能够在鼠标悬停时更改Backgroound
和BorderThickness
属性。
有些按钮是用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"];
我仍然在悬停时获得常规浅蓝色背景。
答案 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。否则将不会应用。希望这可以帮助。