0

我的 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触发器之外,我还想在单击标签时设置相同的属性值(因为单击事件不适用于标签,我使用 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 样式将永远不会应用于我的标签。我知道样式覆盖,但不知道如何摆脱它。

4

1 回答 1

1

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

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

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

myLabel或者,对使用触发器应用自定义样式来更改Foregroundand Background,并完全摆脱事件处理程序。

于 2014-10-28T19:00:24.740 回答