我为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-Model中的属性:
查看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);
}
}
属性已正确绑定,并在控件值更改时发出警报。问题是,标签前景的颜色永远不会改变。我尝试在样式中为前景硬编码一个值(例如:红色),但它仍然没有改变。
作为最后的手段,我尝试将控件的可见性状态更改为Hidden而不是更改前景的值并且它有效。标签会相应地隐藏和显示自己。
为什么我无法在样式的触发器中更改前景的值?
我正在使用Expression Blend 4以及手动编辑代码。我也在使用PRISM 4。
答案 0 :(得分:4)
由于{{3},您不得在Forground
本身上设置Label
,本地值会覆盖样式触发器 }。因此触发器不会影响Foreground
。
虽然可以通过触发器覆盖Setter,因此您可以将值移动到样式设置器中。
答案 1 :(得分:1)
猜猜:
对我来说似乎应该删除Label
定义Foreground="White"
,因为它克服了样式定义。而是添加
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Foreground" Value="White"/>
</Trigger>
应该工作......