以编程方式WPF更改按钮悬停样式
我想为我的WPF应用程序中的按钮创建自定义样式。当鼠标悬停在它们上面时,我希望能够更改它们的Backgroound
和BorderThickness
属性。以编程方式WPF更改按钮悬停样式
一些按钮是在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"];
我仍然得到规则淡蓝色背景徘徊。
您可以创建一个通用的风格是这样的:
<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
来自第二个链接的代码适用于我,但我有点困惑。在我删除
@MarcinBator该按钮在Windows中有一个默认模板。因此,窗口中的所有按钮看起来都是一样的。它可能会在未来的Windows版本中发生变化,从而帮助您的应用程序看起来与新应用程序相同。您需要的是将此模板更改为您认为更好的模板。这就是这个代码所做的。 – Emad
对于风格上的一个普通按钮,你需要设置的TargetType到按钮的工作。否则它不会被应用。希望这可以帮助。
我搞砸了一点点。在我的问题的第一部分中,我提到了创建按钮,但我的意思是创建从Button派生的自定义UpperMenuModeButton按钮。 –
用鼠标悬停触发器在xaml中创建一个通用样式,并在您的代码中应用[样式](http://stackoverflow.com/questions/10686917/setting-the-style-property-of-a-wpf-label -in-code) –
@MathewJibin谢谢你的回答!你能否提供更多关于如何创建通用样式的信息,以便我可以将它应用到不同窗口中的按钮上? –
或者只是创建一个样式来实现特定类型的所有元素,如按钮 – Emad