我的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样式永远不会应用于我的标签。我知道风格重写,但不知道如何摆脱它。
答案 0 :(得分:1)
您的MouseDown
处理程序正在为Foreground
和Background
设置本地值,并且本地值优先于所有其他值来源,包括那些值通过触发器和设置器。有关详细信息,请参阅MSDN上的Dependency Property Value Precedence。
使用SetCurrentValue
更改当前属性值而不切换到本地值:
myLabel.SetCurrentValue(
Control.ForegroundProperty,
SolidColorBrush(Color.FromArgb(0xff, 0x00, 0x67, 0xB0)));
或者,将自定义样式应用于使用触发器更改myLabel
和Foreground
的{{1}},并完全删除事件处理程序。