设置按钮悬停或onmouseover背景颜色

时间:2014-05-19 08:39:53

标签: wpf xaml

我正在努力寻找解决方案。我试过的其他每一个都没有用。也许我错过了什么。

当我用鼠标悬停在按钮上时,我想更改按钮的背景颜色。 这是我的XAML:

<Window x:Class="Recruitment_Manager.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="374" Width="940">
<Window.Resources>
    <Style TargetType="Button" x:Key="NavigationButtonStyle">
        <Setter Property="Height" Value="35"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        <Setter Property="Background" Value="Transparent"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Green"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style TargetType="StackPanel" x:Key="NavigationButtonContentStyle">
        <Setter Property="Orientation" Value="Horizontal"/>
    </Style>
    <Style TargetType="Image" x:Key="NavigationButtonImageStyle">
        <Setter Property="Width" Value="35"/>
    </Style>
    <Style TargetType="Label" x:Key="NavigationButtonLabelStyle">
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="FontSize" Value="15"/>
    </Style>
</Window.Resources>
<Grid>
    <StackPanel HorizontalAlignment="Left" Width="200">
        <StackPanel.Background>
            <SolidColorBrush Color="#404040"/>
        </StackPanel.Background>
        <Button Style="{StaticResource ResourceKey=NavigationButtonStyle}">
            <StackPanel Style="{StaticResource ResourceKey=NavigationButtonContentStyle}">
                <Image Style="{StaticResource ResourceKey=NavigationButtonImageStyle}">

                </Image>
                <Label Style="{StaticResource ResourceKey=NavigationButtonLabelStyle}">
                    Settings
                </Label>
            </StackPanel>
        </Button>

    </StackPanel>
</Grid>

但看起来触发器永远不会执行? 我错过了什么,或者我怎样才能得到我想要的东西? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

要删除Button上的默认MouseOver行为,您需要修改ControlTemplate。将样式定义更改为以下内容应该可以解决问题:

<Style TargetType="{x:Type Button}" x:Key="NavigationButtonStyle">
    <Setter Property="Height" Value="35"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Green"/>
        </Trigger>
    </Style.Triggers>
</Style>

答案 1 :(得分:0)

尝试以下代码

<Style TargetType="Button" x:Key="NavigationButtonStyle">
    ...    
   <Trigger Property="Control.IsMouseOver" Value="True">
      <Setter Property="Background" Value="Green"/>
   </Trigger>
</Style>