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

WPF中DataGrid单元格右侧边框无法移除的问题求助

WPF DataGrid最后一列额外边框问题的解决方法

以下是几个针对性的解决思路,按优先级尝试:

  • 修改GridLinesVisibility属性
    你当前设置了GridLinesVisibility="All",这个属性控制的是DataGrid全局的网格线,而非单元格边框。如果不需要竖网格线,直接将其改为Horizontal,即可消除所有竖线:

    <DataGrid ... GridLinesVisibility="Horizontal" ...>
    
  • 单独隐藏最后一列的分隔线
    如果需要保留其他列的竖网格线,仅隐藏最后一列的额外边框,可以给最后一列的DataGridTemplateColumn设置SeparatorVisibility="Collapsed":

    <DataGridTemplateColumn Header="Type" Width="*" IsReadOnly="True" 
                            HeaderStyle="{StaticResource FlattenRightHeader}" 
                            CellStyle="{StaticResource RightCell}"
                            SeparatorVisibility="Collapsed">
    
  • 调整DataGrid默认模板解决对齐问题
    若上述方法仍有边框不对齐的情况,大概率是DataGrid默认模板内的ScrollViewer或布局元素导致的。可以替换自定义模板,确保内部内容与外边框严格对齐:

    <Style TargetType="{x:Type DataGrid}" x:Key="AlignedDataGridStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGrid}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" 
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Background="{TemplateBinding Background}"
                            SnapsToDevicePixels="True">
                        <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false">
                            <ScrollViewer.Template>
                                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="*"/>
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="*"/>
                                            <RowDefinition Height="Auto"/>
                                        </Grid.RowDefinitions>
                                        <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter"
                                                                        Grid.Column="1"
                                                                        Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                                        <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                                                Grid.Row="1"
                                                                Grid.Column="1"
                                                                CanContentScroll="{TemplateBinding CanContentScroll}"
                                                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                        <ScrollBar x:Name="PART_VerticalScrollBar"
                                                    Grid.Row="1"
                                                    Grid.Column="2"
                                                    Maximum="{TemplateBinding ScrollableHeight}"
                                                    Orientation="Vertical"
                                                    Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                                                    Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                                    ViewportSize="{TemplateBinding ViewportHeight}"/>
                                        <ScrollBar x:Name="PART_HorizontalScrollBar"
                                                    Grid.Row="2"
                                                    Grid.Column="1"
                                                    Maximum="{TemplateBinding ScrollableWidth}"
                                                    Orientation="Horizontal"
                                                    Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                                                    Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                                    ViewportSize="{TemplateBinding ViewportWidth}"/>
                                    </Grid>
                                </ControlTemplate>
                            </ScrollViewer.Template>
                            <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    然后给你的DataGrid应用这个样式:

    <DataGrid ... Style="{StaticResource AlignedDataGridStyle}" ...>
    
  • 消除ScrollViewer的额外边距
    如果横向滚动条不需要,可以设置HorizontalScrollBarVisibility="Disabled";若必须保留滚动条,可给ScrollViewer设置Padding为0:

    <DataGrid ...>
        <DataGrid.Resources>
            <Style TargetType="{x:Type ScrollViewer}">
                <Setter Property="Padding" Value="0"/>
            </Style>
        </DataGrid.Resources>
        <!-- 列定义 -->
    </DataGrid>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:06:07