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設定しています。ローカル値は、トリガーやセッターによって設定されたものを含む、他のすべての値ソースよりも優先されます。詳細については、MSDN の依存関係プロパティ値の優先順位を参照してください。ForegroundBackground

SetCurrentValueローカル値に切り替えることなく、現在のプロパティ値を変更するために使用します。

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

myLabelまたは、トリガーを使用してForegroundとを変更するカスタム スタイルを に適用しBackground、イベント ハンドラーを完全に削除します。

于 2014-10-28T19:00:24.740 に答える