2016-11-13 123 views
-1

我想为我的WPF应用程序中的按钮创建自定义样式。当鼠标悬停在它们上面时,我希望能够更改它们的BackgrooundBorderThickness属性。以编程方式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"]; 

我仍然得到规则淡蓝色背景徘徊。

+0

用鼠标悬停触发器在xaml中创建一个通用样式,并在您的代码中应用[样式](http://stackoverflow.com/questions/10686917/setting-the-style-property-of-a-wpf-label -in-code) –

+0

@MathewJibin谢谢你的回答!你能否提供更多关于如何创建通用样式的信息,以便我可以将它应用到不同窗口中的按钮上? –

+0

或者只是创建一个样式来实现特定类型的所有元素,如按钮 – Emad

回答

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

+0

来自第二个链接的代码适用于我,但我有点困惑。在我删除 ...后,我的触发器不会触发。在开始时,我的按钮颜色变成绿色,但是当我将鼠标悬停在它上面时,它会更改为默认淡蓝色。在 ...中有什么重要? –

+0

@MarcinBator该按钮在Windows中有一个默认模板。因此,窗口中的所有按钮看起来都是一样的。它可能会在未来的Windows版本中发生变化,从而帮助您的应用程序看起来与新应用程序相同。您需要的是将此模板更改为您认为更好的模板。这就是这个代码所做的。 – Emad

0

对于风格上的一个普通按钮,你需要设置的TargetType到按钮的工作。否则它不会被应用。希望这可以帮助。

+0

我搞砸了一点点。在我的问题的第一部分中,我提到了创建按钮,但我的意思是创建从Button派生的自定义UpperMenuModeButton按钮。 –