更改标签';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。

更改标签';s使用样式触发器的前景色

您不能在Label本身上设置Forground,由于优先级本地值将覆盖样式触发器。因此,该触发器不影响CCD_ 3。

setter可以被触发器覆盖,因此您可以将值移动到样式setter中。

猜测一下:

对我来说似乎在Label定义中Foreground="White"应该被删除,因为它克服了样式定义。相反,添加

<Trigger Property="IsEnabled" Value="True">
       <Setter Property="Foreground" Value="White"/>
   </Trigger>

应该工作。。。