在mouseOver上更改样式

时间:2011-10-09 20:02:14

标签: wpf xaml styles blend

我有一个按钮样式。第一个是正常状态,第二个是mouseOver状态。如何在鼠标进入时更改按钮样式?在Blend中,我试图创建一个故事板并改变风格但没有任何反应。

1 个答案:

答案 0 :(得分:3)

您可以将Style属性绑定到IsMouseOver并使用通用的“true value”/“false value”转换器。

您可以像这样指定转换器

<Window.Resources>
    <Style TargetType="Button" x:Key="normalStyle">
        <Setter Property="Foreground" Value="Green"/>
    </Style>
    <Style TargetType="Button" x:Key="mouseOverStyle">
        <Setter Property="Foreground" Value="Red"/>
    </Style>
    <converters:BooleanObjectConverter FalseValue="{StaticResource normalStyle}"
                                       TrueValue="{StaticResource mouseOverStyle}"
                                       x:Key="styleConverter"/>
</Window.Resources>

然后将Style绑定到IsMouseOver

<Button Style="{Binding RelativeSource={RelativeSource Self},
                        Path=IsMouseOver,
                        Converter={StaticResource styleConverter}}" 
        ... />

BooleanObjectConverter

public class BooleanObjectConverter : IValueConverter
{
    public object TrueValue { get; set; }
    public object FalseValue { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((bool)value == true)
        {
            return TrueValue;
        }
        return FalseValue;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}