有没有可能关闭WPF ListView
的选择,这样当用户单击行时,该行不会突出显示?
我希望第1行在单击时看起来像第0行。
可能相关:我可以样式化悬停/选择的外观吗?例如:要将蓝色渐变悬停外观(第3行)替换为自定义纯色。我找到了this和this,不幸的是帮不上忙。
(在不使用ListView的情况下也可以实现同样的效果。我只是希望能够像ListView一样使用逻辑滚动和UI虚拟化)
ListView的XAML是:
<ListView Height="280" Name="listView">
<ListView.Resources>
<!-- attempt to override selection color -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}"
Color="Green" />
</ListView.Resources>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<!-- more columns -->
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
发布于 2009-06-26 21:18:23
根据Martin Konicek的评论,要以最简单的方式完全禁用对项目的选择:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Focusable" Value="false"/>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
但是,如果您仍然需要ListView的功能,比如能够选择一个项目,那么您可以直观地禁用所选项目的样式,如下所示:
您可以通过多种方式完成此操作,从更改ListViewItem的ControlTemplate到只设置样式(简单得多)。您可以使用ItemContainerStyle为ListViewItems创建样式,并在选中时“关闭”背景和边界画笔。
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Background"
Value="{x:Null}" />
<Setter Property="BorderBrush"
Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
此外,除非您有其他方法可以在选择项时通知用户(或者只是为了测试),否则可以添加一个列来表示该值:
<GridViewColumn Header="IsSelected"
DisplayMemberBinding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
发布于 2010-07-11 21:57:40
摩尔的答案不起作用,这里的页面:
Specifying the Selection Color, Content Alignment, and Background Color for items in a ListBox
解释了它不能工作的原因。
如果你的listview只包含基本的文本,解决这个问题的最简单的方法就是使用透明画笔。
<Window.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00000000"/>
</Style.Resources>
</Style>
</Window.Resources>
如果列表视图的单元格包含诸如组合框之类的控件,这将产生不希望的结果,因为它还会更改它们的颜色。若要解决此问题,必须重新定义控件的模板。
<Window.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border SnapsToDevicePixels="True"
x:Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Columns="{TemplateBinding GridView.ColumnCollection}"
Content="{TemplateBinding Content}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled"
Value="False">
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
发布于 2014-11-07 23:23:15
将每个ListViewItem的样式设置为false。
<ListView ItemsSource="{Binding Test}" >
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Focusable" Value="False"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
https://stackoverflow.com/questions/1051215
复制相似问题