单击后,WPF标签IsMouseOver样式不起作用

时间:2014-10-28 15:52:09

标签: wpf triggers wpf-controls wpf-style

我的UI中有一个标签,并且有一个样式。

<Style x:Key="ColorChangingLabel" TargetType="{x:Type Label}">
    <Setter Property="FontSize" Value="13"></Setter>
    <Setter Property="Foreground" Value="#ff676767"></Setter>
    <Setter Property="Background" Value="White"></Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="#ffEAECEE"></Setter>
            <Setter Property="Foreground" Value="#ff0067B0"></Setter>
        </Trigger>
    </Style.Triggers>
</Style>

MouseOver触发器外,我还想在单击标签时设置相同的属性值(因为click事件不适用于标签我使用MouseDown事件)。 这是MouseDown事件代码

private void myLabel_MouseDown(object sender, MouseButtonEventArgs e){
     myLabel.Foreground = new SolidColorBrush(Color.FromArgb(0xff, 0x00, 0x67, 0xB0));
     myLabel.Background = new SolidColorBrush(Color.FromArgb(0xff, 0xea, 0xec, 0xee));
}

所以我的问题是如果我在我的标签上按下鼠标,之后我的MouseOver样式永远不会应用于我的标签。我知道风格重写,但不知道如何摆脱它。

1 个答案:

答案 0 :(得分:1)

您的MouseDown处理程序正在为ForegroundBackground设置本地值,并且本地值优先于所有其他值来源,包括那些值通过触发器和设置器。有关详细信息,请参阅MSDN上的Dependency Property Value Precedence

使用SetCurrentValue更改当前属性值而不切换到本地值:

myLabel.SetCurrentValue(
    Control.ForegroundProperty,
    SolidColorBrush(Color.FromArgb(0xff, 0x00, 0x67, 0xB0)));

或者,将自定义样式应用于使用触发器更改myLabelForeground的{​​{1}},并完全删除事件处理程序。