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

本文关键字:条件 样式 属性 TextBlock Text 基于 | 更新日期: 2023-09-27 18:35:08

我正在尝试根据 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"的枚举的条件样式,但不依赖于不断变化的变量名称,因为如果一个期望一个名为"CurrentStatusEnum"的变量,我需要两种类似的样式,而另一个如果变量名称会不同,例如"NewStatusEnum"。求助于匹配"Text"之类的属性将允许我在使用 TextBlock 时使用相同的样式

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

更新数据触发器绑定,如下所示:

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