Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用交替背景突出显示WPF Listview控件中的选定行_C#_Wpf_Xaml_Visual Studio 2008_Listview - Fatal编程技术网

C# 如何使用交替背景突出显示WPF Listview控件中的选定行

C# 如何使用交替背景突出显示WPF Listview控件中的选定行,c#,wpf,xaml,visual-studio-2008,listview,C#,Wpf,Xaml,Visual Studio 2008,Listview,我正在使用VS2008和.NET框架的3.5版本。我已将代码设置为在WPF ListView控件中替换背景行。使用的一种颜色是白色。使用的另一种颜色是浅绿色。单击白线时,会以浅蓝色亮显该线。单击绿线时,不会突出显示,背景颜色保持浅绿色。我曾尝试在XAML中指定HighlightBrushKey和ControlBrushKey,但没有效果。我需要做什么才能在单击时突出显示绿线 以下是XAML代码: <!-- Define the resource for the alternating ba

我正在使用VS2008和.NET框架的3.5版本。我已将代码设置为在WPF ListView控件中替换背景行。使用的一种颜色是白色。使用的另一种颜色是浅绿色。单击白线时,会以浅蓝色亮显该线。单击绿线时,不会突出显示,背景颜色保持浅绿色。我曾尝试在XAML中指定HighlightBrushKey和ControlBrushKey,但没有效果。我需要做什么才能在单击时突出显示绿线

以下是XAML代码:

<!-- 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>
任何关于XAML或C#代码隐藏的建议都将不胜感激。


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

漂亮!太简单了。我不敢说我花了多少时间试图弄明白这件小事。。。非常感谢。出于好奇,是否可以根据原始颜色指定高亮显示线的颜色。例如,如果选择了一条白线,是否可以将颜色更改为浅蓝色,对于浅绿色线,是否可以将其更改为浅绿色?这可以使用MultiTrigger实现。但若我们在触发器中使用背景条件,那个么我们就不能在setter中使用相同的背景属性。因此,作为替代方案,我们可以在触发器条件下使用ItemsControl.AlternationIndex属性。请参阅上面更新的代码以获得预期结果。
<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>