2011-02-02 88 views
2

我有一個ObservableCollection<Object1>類型(Messages在下面的代碼中),這是綁定到ItemsControl。 Object1有兩個屬性,即ErrMsgIsError。如果其錯誤(即,如果IsError爲真),則我想以紅色顯示ErrMsg,否則爲黑色。Textblock樣式dataTrigger不在裏面ItemsControl

<ItemsControl 
    Height="Auto" 
    Background="White" 
    ItemsSource="{Binding Messages}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock 
        Margin="5,0,0,0" 
        Text="{Binding ErrMsg}" 
        Width="Auto" 
        Foreground="Black"> 
        <TextBlock.Style> 
         <Style TargetType="{x:Type TextBlock}">  
          <Style.Triggers>   
           <DataTrigger 
            Binding="{Binding IsError}" 
            Value="true">  
            <Setter 
             Property="TextBlock.Foreground" 
             Value="Red" />   
           </DataTrigger>  
          </Style.Triggers>  
         </Style> 
        </TextBlock.Style> 
       </TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

問題是,所有的消息都始終顯示在黑色的顏色,不論IsError價值?

我該如何做到這一點?

回答

7

這是因爲您在文本塊聲明中指定了Foreground="Black"。本地值(在元素本身上設置)覆蓋樣式值(包括觸發器)。

爲了解決這個問題,只要將黑色前景的設置風格:

<TextBlock Margin="5,0,0,0" 
      Text="{Binding Value}" 
      Width="Auto"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Foreground" 
        Value="Black"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsError}" 
          Value="true"> 
        <Setter Property="Foreground" 
          Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
0

我認爲你需要從你的財產取出TextBlock前綴,設置前景色爲黑色的風格:

<Style TargetType="{x:Type TextBlock}"> 
    <Setter Property="Foreground" Value="Black"/> 
    <Style.Triggers>   
     <DataTrigger Binding="{Binding IsError}" Value="true">  
      <Setter Property="Foreground" Value="Red" />   
     </DataTrigger>  
    </Style.Triggers> 
    </Style> 

你通常只需要限定一個類型的屬性(這應該是在括號中)包含附加屬性的路徑或故事板。

相關問題