更改标签';s使用样式触发器的前景色
本文关键字:样式 触发器 前景色 标签 | 更新日期: 2023-09-27 18:19:55
我为Label创建了一个样式,该样式应该根据"IsEnabled"属性的值来更改前景的颜色:
<Style x:Key="ToggleLabelStyle" TargetType="{x:Type Label}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{DynamicResource DisabledToggleTextBrush}"/>
</Trigger>
</Style.Triggers>
(...)
</Style>
我的一个控件有一个应用了此样式的标签。标签的"IsEnabled"属性绑定到控件的视图模型中的属性:
视图的XAML:
<Label x:Name="RememberCredentialsLabel" Style="{DynamicResource ToggleLabelStyle}" IsEnabled="{Binding SaveCredentials}" Content="Remember Credentials" Grid.Column="1" Margin="0,28.849,39.339,10.124" Grid.Row="3" HorizontalAlignment="Right" Width="130.5" Foreground="White"/>
查看模型属性:
public bool SaveCredentials
{
get
{
return _saveCredentials;
}
set
{
_saveCredentials = value;
RaisePropertyChanged(() => SaveCredentials);
}
}
该属性已正确绑定,控件的值更改时会发出警报。问题是,标签前景的颜色永远不会改变。我试着用这种风格(例如:红色)为前景编码一个值,但它仍然没有改变。
作为最后的手段,我尝试将控件的可见性状态更改为"隐藏",而不是更改前景的值,结果成功了。标签会相应地隐藏和显示自己。
为什么我无法在样式中的触发器内更改前景的值?
我正在使用Expression Blend 4以及手动编辑代码。我也在使用PRISM 4。
您不能在Label
本身上设置Forground
,由于优先级,本地值将覆盖样式触发器。因此,该触发器不影响CCD_ 3。
setter可以被触发器覆盖,因此您可以将值移动到样式setter中。
猜测一下:
对我来说似乎在Label
定义中Foreground="White"
应该被删除,因为它克服了样式定义。相反,添加
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Foreground" Value="White"/>
</Trigger>
应该工作。。。