我正在玩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>
两次尝试都只是将背景设置为白色(或透明,我不知道)。我知道这只是语法,我会欣赏另一个正确方向的推动:)
答案 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>