You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF如何移除ListView的表头分隔线?

移除WPF ListView表头分隔线的解决方案

嘿,针对你这个需求,得先分两种常见场景来处理——毕竟你的代码里没明确说明是不是用了GridView作为ListView的View(通常说“表头”的话,大概率是用了GridView),下面分别给你对应的解决方法:

场景1:ListView使用了GridView(带列表头)

这种情况下,表头的分隔线(包括列之间的纵向线和表头底部的横向线)都来自GridViewColumnHeader的默认样式,我们可以通过自定义样式来移除它们:

方法1:快速移除分隔线(修改边框属性)

直接在ListView的资源里定义GridViewColumnHeader的样式,把边框厚度设为0或者边框颜色设为透明:

<ListView ItemsSource="{Binding ...}">
    <ListView.Resources>
        <Style TargetType="{x:Type GridViewColumnHeader}">
            <!-- 移除所有边框(包括列分隔线和底部线) -->
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <!-- 如果你只想保留表头底部的线,去掉右侧的分隔线,可以改成:
            <Setter Property="BorderThickness" Value="0 0 0 1"/>
            -->
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <!-- 这里是你的列定义,比如: -->
            <GridViewColumn Header="名称" DisplayMemberBinding="{Binding Name}"/>
            <GridViewColumn Header="数值" DisplayMemberBinding="{Binding Value}"/>
        </GridView>
    </ListView.View>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <!-- 你的项内容 -->
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

方法2:完全自定义表头模板(彻底控制样式)

如果上面的方法还没完全移除分隔线,你可以直接重写GridViewColumnHeader的模板,完全去掉任何分隔元素:

<ListView ItemsSource="{Binding ...}">
    <ListView.Resources>
        <Style TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                        <!-- 这里只保留内容展示,没有任何默认边框/分隔线 -->
                        <Grid Background="{TemplateBinding Background}">
                            <ContentPresenter 
                                Margin="6,3" 
                                VerticalAlignment="Center"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.Resources>
    <!-- 剩下的ListView定义和之前一样 -->
</ListView>

场景2:ListView未使用GridView(无列表头,指顶部的默认分隔区域)

如果你的ListView没加GridView,所谓的“表头分隔线”可能是默认模板里顶部的空白分隔区域,这时候直接重写ListView的模板就能去掉:

<ListView ItemsSource="{Binding ...}">
    <ListView.Template>
        <ControlTemplate TargetType="{x:Type ListView}">
            <Border 
                BorderBrush="{TemplateBinding BorderBrush}" 
                BorderThickness="{TemplateBinding BorderThickness}" 
                Background="{TemplateBinding Background}" 
                Padding="{TemplateBinding Padding}" 
                SnapsToDevicePixels="True">
                <ScrollViewer Focusable="False" Padding="{TemplateBinding Padding}">
                    <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                </ScrollViewer>
            </Border>
        </ControlTemplate>
    </ListView.Template>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <!-- 你的项内容 -->
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这个模板去掉了默认ListView里可能存在的表头区域,直接让列表项从顶部开始显示,自然也就没有分隔线了。


内容的提问来源于stack exchange,提问作者Erik Hakobyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:50:53