基于TextBlock.Text属性的条件样式?

时间:2013-10-12 14:45:35

标签: c# wpf

我正在尝试根据Text属性有条件地格式化文本块,但我无法使其工作:

<Style x:Key="StatusEnumTextStyle" TargetType="TextBlock" >
    <Style.Triggers>
        <DataTrigger Binding="{Binding Text}" Value="InProgress">
            <Setter Property="Foreground" Value="Red" />
        </DataTrigger>
    </Style.Triggers>
</Style>

<TextBlock Text="InProgress" Style="{StaticResource StatusEnumTextStyle}"/>

但是我收到了绑定错误:

System.Windows.Data Error: 40 : BindingExpression path error: 'Text' property not found on 'object' ''NotifierViewModel' (HashCode=43600526)'. BindingExpression:Path=Text; DataItem='VM' (HashCode=43600526); target element is 'TextBlock' (Name=''); target property is 'NoTarget' (type 'Object')

我发现触发器尝试获取String.Text但是如何使用TextBlock的属性来触发?

背景:基本上我想要一个名为“StatusEnum”的基于Enum的条件样式,但不依赖于变化的变量名称,因为如果需要一个名为“CurrentStatusEnum”的变量,我需要两个相似的样式。名称会有所不同,例如“NewStatusEnum”。试图匹配像“文本”这样的属性可以让我在使用TextBlock时使用相同的样式

1 个答案:

答案 0 :(得分:2)

更新您的DataTrigger绑定,如下所示:

<Style.Triggers>
    <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="InProgress">
        <Setter Property="Foreground" Value="Red" />
    </DataTrigger>
</Style.Triggers>