2017-03-01 140 views
1

我必須更改ListBox的ItemTemplate的背景顏色,具體取決於布爾值的值。 這裏是我的列表框:更改WPF ItemTemplate的背景顏色

<ListBox Name="itemListBox" 
     ScrollViewer.VerticalScrollBarVisibility="Visible" 
     SelectionChanged="itemListBox_SelectionChanged"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <StackPanel Width="200"> 
        <TextBlock FontSize="10" 
           FontWeight="Bold" 
           VerticalAlignment="Center" 
           Text="{Binding Path=Value.DocID}" /> 
        <TextBlock FontSize="10" 
           VerticalAlignment="Center" 
           TextWrapping="Wrap" 
           Text="{Binding Path=Value.Serial}"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

如果用戶刪除了某個項目,我想表明他在灰色backrgound。
精度:ListBox綁定到一個Dictionnary,它包含一個布爾值「IsDeleted」。 對不起英語。
謝謝

+0

「如果用戶刪除一個項目」,那麼代碼中的含義是什麼?該項目是否有一個標誌表明它已被刪除? –

+0

列表框綁定到一個字典,其中包含一個布爾值「IsDeleted」 – betsou

回答

3

你可以使用一個ItemContainerStyleDataTrigger:如果要動態地設置該屬性

<ListBox Name="itemListBox" ScrollViewer.VerticalScrollBarVisibility="Visible" SelectionChanged="itemListBox_SelectionChanged"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Value.IsDeleted}" Value="True"> 
        <Setter Property="Background" Value="Gray" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <StackPanel Width="200"> 
        <TextBlock FontSize="10" FontWeight="Bold" VerticalAlignment="Center" Text="{Binding Path=Value.DocID}" /> 
        <TextBlock FontSize="10" VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Path=Value.Serial}"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

確保與IsDeleted屬性的類正確地實現了INotifyPropertyChanged接口和想要的背景以相應地更新。

+0

非常感謝! 是的,INotifyPropertyChanged已實施。 – betsou