WPF的ListViewItem的变化选择颜色 [英] Change selection-color of WPF ListViewItem

查看:362
本文介绍了WPF的ListViewItem的变化选择颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含一些ListViewItems一个ListView。默认情况下,选择项目使得他们的背景,一些深层次的蓝色。我想申请一个样式,这样在选择项目并没有改变它的外观。

I have a ListView containing some ListViewItems. By default, selecting items makes their background to some deep blue. I would like to apply a style such that selecting an item does not change its look.

在我的XAML我已经达到了这个:

In my xaml I already achieved this:

<Style TargetType="ListViewItem">
   <Style.Resources>
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
   </Style.Resources>
</Style>

不幸的是,这并没有做的伎俩。它只是简单地作出选择白色,而不是蓝色。

Unfortunately, this does not do the trick. It just simply makes the selection white instead of blue.

有没有人有一个想法?

最良好的祝愿,
基督教

Best wishes, Christian

编辑:
示例code:

Sample Code:

<Window.Resources>
   <Style TargetType="ListViewItem">
      <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" 
                                 Color="Black"/>                      
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                                 Color="Transparent"/>
      </Style.Resources>
  </Style>
</Window.Resources>



<ListView x:Name="lvTestRun" ItemsSource="{Binding Path=TestRunData}" Margin="177,26,8,53.277" SelectionMode="Multiple">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Status"/>
                    <GridViewColumn Header="Duration"/>
                    <GridViewColumn Header="Start Time"/>
                    <GridViewColumn Header="End Time"/>
                </GridView>
            </ListView.View>
        </ListView>

为了重现此,您可能需要一个单一的ListViewItem的背景色设置为类似绿色或红色。

In order to reproduce this, you may have to set the background color of a single ListViewItem to something like green or red.

推荐答案

我不知道我明白你的白色,而不是蓝色的意思。当一个ListViewItem的选定前景和背景由触发改变。要更改的ListViewItem的前景,你可以用这个

I'm not sure I understand what you mean by white instead of blue. When a ListViewItem is selected the foreground and background is changed by a trigger. To change the foreground of a ListViewItem you can use this

<ListView ...>
    <ListView.ItemContainerStyle>
        <Style 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="Transparent"/>
            </Style.Resources>
        </Style>
    </ListView.ItemContainerStyle>
    ...
</ListView>

更新

看看这个重新模板。我删除了所有触发器选

Try this for re-templating. I removed all triggers for selected

<ListView ...>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Resources>
                <LinearGradientBrush x:Key="ListItemHoverFill" EndPoint="0,1" StartPoint="0,0">
                    <GradientStop Color="#FFF1FBFF" Offset="0"/>
                    <GradientStop Color="#FFD5F1FE" Offset="1"/>
                </LinearGradientBrush>
            </Style.Resources>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <Border CornerRadius="2" SnapsToDevicePixels="True"  
                                BorderThickness="{TemplateBinding BorderThickness}"   
                                BorderBrush="{TemplateBinding BorderBrush}"   
                                Background="{TemplateBinding Background}">
                            <Border Name="InnerBorder" CornerRadius="1" BorderThickness="1">
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition MaxHeight="11" />
                                        <RowDefinition />
                                    </Grid.RowDefinitions>

                                    <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" />
                                    <GridViewRowPresenter Grid.RowSpan="2"   
                                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"   
                                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                </Grid>
                            </Border>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" />
                                <Setter Property="BorderBrush" Value="#FFCCF0FF" />
                                <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
                            </Trigger>
                            <!--<Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" />
                                <Setter Property="BorderBrush" Value="#FF98DDFB" />
                                <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" />
                                <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
                                <Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" />
                            </Trigger>-->
                            <!--<MultiTrigger> 
                <MultiTrigger.Conditions> 
                    <Condition Property="IsSelected" Value="True" /> 
                    <Condition Property="Selector.IsSelectionActive" Value="False" /> 
                </MultiTrigger.Conditions> 
                <Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" /> 
                <Setter Property="BorderBrush" Value="#FFCFCFCF" /> 
            </MultiTrigger>-->
                            <!--<MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsSelected" Value="True" />
                                    <Condition Property="IsMouseOver" Value="True" />
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" />
                                <Setter Property="BorderBrush" Value="#FF98DDFB" />
                            </MultiTrigger>-->
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

这篇关于WPF的ListViewItem的变化选择颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆