betsou
betsou

Reputation: 143

Change background color of a WPF ItemTemplate

I have to change Background color of an ItemTemplate of a ListBox, depending the value of a boolean. Here is my ListBox :

<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>

If the user delete an Item, I want to show him in grey backrgound.
Precision : The ListBox is binded to a Dictionnary, that contains a boolean value "IsDeleted". Sorry for the poor English.
Thank you

Upvotes: 1

Views: 2948

Answers (1)

mm8
mm8

Reputation: 169150

You could use an ItemContainerStyle with a DataTrigger:

<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>

Make sure that the class with the IsDeleted property implements the INotifyPropertyChanged interface correctly if you intend to set the property dynamically and want the background to get updated accordingly.

Upvotes: 5

Related Questions