2013-10-12 97 views
1

我试图有条件地格式化取决于Text属性文本块,但我不能得到它的工作:基于TextBlock.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”的变量,并且如果var名称会有所不同,例如“NewStatusEnum”。诉诸匹配,如“文本”的属性将会允许我使用相同的样式当过我使用的TextBlock

回答

2

更新您的DataTrigger绑定如下:

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