Listview选择颜色

时间:2009-05-21 21:37:23

标签: wpf listview selection listviewitem

我正在玩wpf,我看到了以下文章: WPF ListView Inactive Selection Color

我想做类似的事情。我想在选择listviewitem时放置一个边框,我想不改变背景颜色。我想要这个的原因是我想要一个颜色编码的列表视图,我仍然希望看到它被选中的颜色,但我想知道它是由它周围有边框选择。

有什么想法吗?

更新

我尝试了下面的答案,它让我走了一半,它确实在listviewitem周围放了一个边框,但它覆盖了我的背景颜色。我无法获得我尝试的正确语法(注意BasedOn):

    <Style x:Key="SourceListView" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
    </Style>

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource SourceListView}" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Border
                             x:Name="Border"
                             BorderBrush="Transparent"
                             BorderThickness="1">
                        <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

然后我尝试了这个:

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
        <Setter Property="Template">
            ...//Same as above
        </Setter>
    </Style>

两次尝试都只是将背景设置为白色(或透明,我不知道)。我知道这只是语法,我会欣赏另一个正确方向的推动:)

1 个答案:

答案 0 :(得分:4)

将ListView上的ItemContainerStyle更改为一种样式,该样式在选择项目时不会更改背景,而是更改边框的颜色。以下是一个例子:

  <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
     <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}" />
     <Setter Property="Template">
        <Setter.Value>
           <ControlTemplate TargetType="{x:Type ListViewItem}">
              <Border
                 x:Name="Border"
                 BorderBrush="Transparent"
                 BorderThickness="1"
                 Background="{TemplateBinding Background}">
                 <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
              </Border>
              <ControlTemplate.Triggers>
                 <Trigger Property="IsSelected" Value="true">
                    <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                 </Trigger>
              </ControlTemplate.Triggers>
           </ControlTemplate>
        </Setter.Value>
     </Setter>
  </Style>

然后使用这样的风格:

<ListView ItemContainerStyle="{StaticResource MyListViewItemStyle}">
   ...
</ListView>