2013-10-12 94 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>