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
相关产品推荐
相关产品推荐

