2011-10-09 53 views
1

我有两种样式的按钮。第一个是正常状态,第二个是mouseOver状态。如何在鼠标进入时更改按钮样式?在混合我试图创建一个故事板和改变风格,但没有发生。在mouseOver上更改样式

回答

3

您可以将Style属性绑定到IsMouseOver,并使用通用的“真值”/“假值”转换器。

您可以指定该转换器这样

<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> 

,然后绑定StyleIsMouseOver

<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(); 
    } 
}