How to highlight selected row in WPF Listview control with alternating background

c#, listview, visual-studio-2008, wpf, xaml

Solution

<StackPanel.Resources>
   <Style x:Key="alternatingListViewItemStyle"
          TargetType="{x:Type ListViewItem}">
      <Style.Triggers>
         <Trigger Property="ItemsControl.AlternationIndex" Value="0">
            <Setter Property="Background" Value="#FFD9F2BF"/>
         </Trigger>
         <Trigger Property="ItemsControl.AlternationIndex" Value="1">
            <Setter Property="Background" Value="White"/>
         </Trigger>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsSelected" Value="True"/>
               <Condition Property="ItemsControl.AlternationIndex" Value="0"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" Value="LightGreen"/>
         </MultiTrigger>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsSelected" Value="True"/>
               <Condition Property="ItemsControl.AlternationIndex"
                          Value="1"/>
            </MultiTrigger.Conditions>
            <Setter Property="Background" Value="LightBlue"/>
         </MultiTrigger>
      </Style.Triggers>
   </Style>
</StackPanel.Resources>

Problem

I am using VS 2008 with 3.5 of the .NET framework. I have set up my code to alternate the background lines in a WPF ListView control. One color used is white. The other color used is a light shade of green. When a white line is clicked on, it highlights the line in light blue. When a green line is clicked on, there is no highlighting and the background color remains light green. I have tried specifying the HighlightBrushKey and the ControlBrushKey in XAML, but they had no effect. What do I need to do in order for the green lines to be highlighted when clicked on? Here is the XAML code: ``` <!-- Define the resource for the alternating background background used in the ListView objects. --> <StackPanel.Resources> <Style x:Key="alternatingListViewItemStyle" TargetType="{x:Type ListViewItem}"> <Style.Resources> <!-- Foreground for Selected ListViewItem --> <!-- <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/> --> <!-- Background for Selected ListViewItem --> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Brown"/> </Style.Resources> <Style.Triggers> <!-- Tried setting the background property here, but this did not work. <DataTrigger Binding="{Binding Path=RowSelected}" Value="True"> <Setter Property="Background" Value="Gainsboro" /> <Setter Property="FontWeight" Value="Bold" /> </DataTrigger> --> <!-- setting up triggers for alternate background colors --> <Trigger Property="ItemsControl.AlternationIndex" Value="1"> <Setter Property="Background" Value="#FFD9F2BF"></Setter> </Trigger> <!-- setting up triggers for alternate background colors <Trigger Property="ItemsControl" Value="1"> <Setter Property="Background" Value="#FFD9F2BF"></Setter> </Trigger> --> <Trigger Property="ItemsControl.AlternationIndex" Value="2"> <Setter Property="Background" Value="White"></Setter> </Trigger> </Style.Triggers> <!-- setting row height here --> </Style> </StackPanel.Resources> <ListView x:Name="ListView1" ItemContainerStyle="{StaticResource alternatingListViewItemStyle}" AlternationCount="2" SelectionChanged="ListView1_SelectionChanged" SelectionMode="Multiple" HorizontalAlignment="Left" ItemsSource = "{Binding ElementName=LobbyWindow, Path=ListCollection1}"> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding Game}"> <GridViewColumnHeader Content="Game" FontWeight="Bold" /> </GridViewColumn> <GridViewColumn DisplayMemberBinding="{Binding Stakes}"> <GridViewColumnHeader Content="Stakes" Width="68" FontWeight="Bold" /> </GridViewColumn> <GridViewColumn Width="30" DisplayMemberBinding="{Binding Seats}"> <GridViewColumnHeader Content="Seats" FontWeight="Bold" /> </GridViewColumn> </GridView> </ListView.View> </ListView> ``` I also have a Selection_Changed event defined in ListView1, but don't know how to grab the correct property or view element out in order to change the background color for that line: ``` private void ListView1_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { ListView listview = sender as ListView; } ``` Any suggestions in XAML or C# code behind would be appreciated.

Original source