删除 WPF ListView/GridView 高亮镶边

2024-04-08

我有 WPF ListView 和 GridView 视图,我想删除行突出显示的任何痕迹。

这段有用的代码可以在该网站的一个答案中找到:

     <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
           <Setter Property="Control.Focusable" Value="False"/>
           <Style.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                 <Setter Property="Background" Value="{x:Null}" />
                 <Setter Property="BorderBrush" Value="{x:Null}" />
              </Trigger>
           </Style.Triggers>
        </Style>
     </ListView.ItemContainerStyle>

但是,虽然此更改有助于删除大部分突出显示,但它不会删除当鼠标移动到 ListView 行上时仍然出现的水平条。我该如何删除它?

我已经处理过涉及 Button 的类似问题,并找到了一个通过删除其镶边来更改 Button 模板的解决方案。

在 ListView/GridView 的这种情况下,我无法找到相应的镶边和模板来更改。


如果您安装了 Windows SDK,则可以在以下位置找到所有默认样式的 XAML 源(假设您安装了示例):

%ProgramFiles%\微软 SDKs\Windows\v6.1\Samples\WPFSamples.zip

zip 文件包含一个文件夹 Core,其中包含 AeroTheme、LunaTheme 等,其中包含默认样式的源代码。不幸的是,这些文件非常大(Aero 约为 8500 行),并且结构或格式不是很好(IMO)。

ListViewItem 的默认控件模板如下所示:

<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>

删除所有突出显示的最佳选择可能是将 ControlTemplate 替换为您自己的仅包含 GridViewRowPresenter(可能在单个边框中)的 ControlTemplate。不要忘记包含在禁用控件时使项目变灰的触发器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除 WPF ListView/GridView 高亮镶边 的相关文章

随机推荐

  • 如何在 SugarCRM 中为该字段创建新的自定义字段数据类型和功能

    如何创建新的自定义字段数据类型并在 SugarCRM 中为该字段添加功能 自定义字段类型需要在 Studio 的字段类型下拉列表中可用 None
  • 将 Google OIDC 与代码流和 PKCE 结合使用

    经过反复试验 在我看来 Google OIDC 在不提供客户端密钥的情况下不支持代码流 https developers google com identity protocols oauth2 native app exchange au
  • Arelle Webserver - 如何从 XBRL 申报中提取损益表?

    我正在尝试根据报表类型提取财务报表信息 让我更详细地向您解释一下 我想从 XBRL 实例中提取损益表 资产负债表和现金流量表 特别是美国公认会计原则 US GAAP 对我来说 完美的解决方案是在 XML 文件中添加标签 这样我就可以使用标签
  • Reactjs在布局中隐藏侧边栏的方式?

    我想知道如何处理这两种布局 首先 我有一个 css 网格布局 可用于 1024px 或更大的分辨率 并且它们支持当前的网格标准 非常标准的布局 带有标题 侧边栏和主要区域 container display grid grid templa
  • 如何在 Swift 中使用组合图像创建 GMSMarker

    I need to create a GMSMarker for my Google Maps screen in an iOS app I need the marker to be a combination of images i e
  • 无法替换 android studio 中的默认图标

    我尝试替换默认图标的图像是 512x512px p ng 要更改图标 我转到 app res new 图像资产 它不允许我在 drawable 中替换或创建新的图标集 我最近的想法是 我可能没有解锁一些权限 但我可以通过直接访问可绘制对象的
  • 如何更改 UWP 中所选 ListView 项目的突出显示颜色 (Windows 10)

    我正在使用 C 和 XAML 开发 Windows 10 应用程序 我有一个 ListView 我想更改所选项目的默认高亮颜色 我看到了很多代码示例 例如this https stackoverflow com questions 2559
  • 如果任一参数为 NaN,什么会导致 C/C++ <、<= 和 == 运算符返回 true?

    我对 IEEE 754 浮点比较规则的理解是 除了 如果其中一个或两个参数均为 NaN 则返回 false 而 运算符将返回 true 我可以通过简单的独立测试轻松重现此行为 for int ii 0 ii lt 4 ii float a
  • 未针对 Rails 资源编译 CSS 样式

    我在 Rails 3 2 应用程序中对样式表进行了以下设置 我有一个应用程序 css文件中定义了许多样式 以及其他几个用于更具体样式的文件 例如与页脚有关的所有内容都在页脚 css 在开发中 一切正常 但在生产中 所需文件中的任何移动样式都
  • 输入stream.read返回0还是-1?

    有什么区别 byte buffer new byte 1024 this if inputStream read buffer gt 0 and if inputStream read buffer 1 两者都能确定网络流终止吗 Java
  • 如何在 WPF 中禁用 UserControl 的大小调整

    How to 禁用此用户控件的大小调整 换句话说 当用户用鼠标抓住这个用户控件的角或边时 我不希望用户能够更改用户控件的大小 或者 如果无法停止调整大小 那么我如何只允许拖动用户控件的右侧
  • req.flash() 需要会话

    我在视图中遇到闪光问题 我正在使用连接闪存 这是我的配置 app use express bodyParser app use express methodOverride app use express cookieParser secr
  • 为什么需要消息队列来与 Web 套接字聊天?

    我在互联网上看到了很多使用 Web 套接字和 RabbitMQ 进行聊天的示例 https github com videlalvaro rabbitmq chat https github com videlalvaro rabbitmq
  • 如何在 O(n+m) 时间内找到有向图中的母顶点? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有向图 G V E 中的母顶点是顶点 v 使得所有其他顶点 顶点 G 可以通过从 v 出发的有向路径到达 给出一个 O n m 算法来
  • 由于通道无故陈旧而不断断开连接

    自从几天前发布最新版本以来 我们的用户不断地被断开连接 因为通道令牌在创建几分钟后就变得陈旧了 我们的令牌设置为持续 5 小时 但如果它们持续 5 10 分钟 我们就很幸运 并且当通道关闭时 我们甚至无法重新连接新的通道令牌 直到用户刷新为
  • .NET新手套接字问题

    我有一个使用 C 编写的客户端 服务器网络程序 TCPListener 和 TCPClient 类 服务器正在读取所有内容 来自客户端 少量 xml 就很好 直到我尝试发送 大文件 100k 返回给客户端 我正在使用流函数 客户端和服务器都
  • Spring 将表单的操作映射到控制器

    我是 Spring 框架的新手 我使用以下方法创建了一个控制器 RequestMapping fetch contactId public String getContact PathVariable contactId Long cont
  • 如何使antlr4完全标记化终端节点

    我正在尝试使用 Antlr 制作一个非常简单的解析器 它基本上标记了一系列 分隔标识符 我做了一个简单的语法 r STRUCTURE SELECTOR STRUCTURE SELECTOR ID STRUCTURE SELECTOR ID
  • Redis部署配置-主从复制

    目前我有两台服务器 我已经部署了基于node js Express JS的Web服务API 我正在使用 Redis 来缓存 JSON 字符串 将此设置部署到生产中的最佳选择是什么 我懂了here https stackoverflow co
  • 删除 WPF ListView/GridView 高亮镶边

    我有 WPF ListView 和 GridView 视图 我想删除行突出显示的任何痕迹 这段有用的代码可以在该网站的一个答案中找到