2010-01-27 68 views
6

TextBlock的前景財產怎麼辦?這是我的XAML:WPF:我設置使用DataTrigger

<TextBlock Name="SeverityText" 
      Grid.Column="1" 
      Grid.Row="0" 
      Foreground="Red"> 
    <TextBlock.Triggers> 

     <DataTrigger Binding="{Binding Path=Severity}"> 
      <DataTrigger.Value> 
       <sm:Severity>Warning</sm:Severity> 
      </DataTrigger.Value> 
      <Setter TargetName="SeverityText" 
        Property="Foreground" 
        Value="Yellow" /> 
     </DataTrigger> 
       <DataTrigger Binding="{Binding Path=Severity}"> 
      <DataTrigger.Value> 
       <sm:Severity>Information</sm:Severity> 
      </DataTrigger.Value> 
      <Setter TargetName="SeverityText" 
        Property="Foreground" 
        Value="White" /> 
     </DataTrigger> 


    </TextBlock.Triggers> 
    <TextBlock>Severity:</TextBlock> 
    <TextBlock Text="{Binding Path=Severity}" /> 
</TextBlock> 

這是我的錯誤信息:

無法找到靜態成員「ForegroundProperty」上類型'ContentPresenter'。

sm:嚴重性是我導入的枚舉。

回答

10

你的觸發器和制訂者必須在一種風格來定義,而不是直接將TextBlock:

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 

       <DataTrigger Binding="{Binding Severity}"> 
        <DataTrigger.Value> 
         <sm:Severity>Warning</sm:Severity> 
        </DataTrigger.Value> 
        <Setter TargetName="SeverityText" 
          Property="Foreground" 
          Value="Yellow" /> 
       </DataTrigger> 

      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

好吧,樣式塊之外的觸發器是什麼? – 2010-01-27 08:28:30

+2

@Jonathan我自己並沒有使用過它們,但我相信控件上的觸發器直接用於事件觸發器,比如捕捉鼠標事件等。 – 2010-01-27 21:35:20

3

寫入屬性的完整路徑也可以工作:
所以

物業=「Foreground」 - > Property =「TextBlock.Foreground」

但正如前面的a你會得到:

System.InvalidOperationException:觸發器集合成員必須是EventTrigger類型。


......如果你不把它放在風格上。