首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF ListView关闭选择

WPF ListView关闭选择
EN

Stack Overflow用户
提问于 2009-06-26 20:46:56
回答 11查看 122.6K关注 0票数 130

有没有可能关闭WPF ListView的选择,这样当用户单击行时,该行不会突出显示?

我希望第1行在单击时看起来像第0行。

可能相关:我可以样式化悬停/选择的外观吗?例如:要将蓝色渐变悬停外观(第3行)替换为自定义纯色。我找到了thisthis,不幸的是帮不上忙。

(在不使用ListView的情况下也可以实现同样的效果。我只是希望能够像ListView一样使用逻辑滚动和UI虚拟化)

ListView的XAML是:

代码语言:javascript
复制
<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>
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-06-26 21:18:23

根据Martin Konicek的评论,要以最简单的方式完全禁用对项目的选择:

代码语言:javascript
复制
<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Focusable" Value="false"/>
        </Style>
    </ListView.ItemContainerStyle>
    ...
</ListView>

但是,如果您仍然需要ListView的功能,比如能够选择一个项目,那么您可以直观地禁用所选项目的样式,如下所示:

您可以通过多种方式完成此操作,从更改ListViewItem的ControlTemplate到只设置样式(简单得多)。您可以使用ItemContainerStyle为ListViewItems创建样式,并在选中时“关闭”背景和边界画笔。

代码语言:javascript
复制
<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>

此外,除非您有其他方法可以在选择项时通知用户(或者只是为了测试),否则可以添加一个列来表示该值:

代码语言:javascript
复制
<GridViewColumn Header="IsSelected"
                DisplayMemberBinding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
票数 150
EN

Stack Overflow用户

发布于 2010-07-11 21:57:40

摩尔的答案不起作用,这里的页面:

Specifying the Selection Color, Content Alignment, and Background Color for items in a ListBox

解释了它不能工作的原因。

如果你的listview只包含基本的文本,解决这个问题的最简单的方法就是使用透明画笔。

代码语言:javascript
复制
<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>

如果列表视图的单元格包含诸如组合框之类的控件,这将产生不希望的结果,因为它还会更改它们的颜色。若要解决此问题,必须重新定义控件的模板。

代码语言:javascript
复制
  <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>
票数 31
EN

Stack Overflow用户

发布于 2014-11-07 23:23:15

将每个ListViewItem的样式设置为false。

代码语言:javascript
复制
<ListView ItemsSource="{Binding Test}" >
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="Focusable" Value="False"/>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1051215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档