繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM