[英]Changing a label's foreground color using style triggers
我为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”属性绑定到控件的“视图模型”中的一个属性:
View的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。
你不能设置Forground
上的Label
本身, 当地的值将覆盖风格触发由于优先级 。 因此,触发器不会影响Foreground
。
但是,触发器可以覆盖设置器,因此您可以将值移动到样式设置器中。
只是猜测:
在我看来,在Label
定义中, Foreground="White"
应该被删除,因为它克服了样式定义。 相反,此添加
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Foreground" Value="White"/>
</Trigger>
应该工作...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.