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

WPF技术问题:无法移除DataGrid单元格周围的内边距/外边距

WPF DataGrid单元格白色内边距问题

我正在尝试消除DataGrid单元格周围的白色内边距,已隐藏水平/垂直表头,因涉及内部信息,单元格文本已做隐藏处理。经测试发现:注释CustomComponent时白色内边距仍存在,注释DataGridTemplateColumn时内边距才会消失。

单元格定义代码

<DataGrid x:Name="modificationsGrid" ItemsSource="{Binding DisplayedTreeviewOperations}" PreviewMouseDown="PreviewMouseDown_OperationsDataGrid">
    <DataGrid.Columns>

        <DataGridTemplateColumn Width="auto">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>

                    <ItemsControl ItemsSource="{Binding Content}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>

                                <custom:CustomComponent></custom:CustomComponent>

                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>

                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

   </DataGrid.Columns>

自定义DataGrid样式表

<!-- Custom DataGrid -->
<Style TargetType="DataGrid">
    <Setter Property="AutoGenerateColumns" Value="False"/>
    <Setter Property="HorizontalGridLinesBrush" Value="White"/>
    <Setter Property="VerticalGridLinesBrush" Value="White"/>
    <!--disable first empty column, remove select all corner that flickers, remove unused header-->
    <Setter Property="HeadersVisibility" Value="None"/>
    <Setter Property="AutoGenerateColumns" Value="False"/>
    <Setter Property="ColumnHeaderHeight" Value="0" />
    <Setter Property="SelectionMode" Value="Single"/>
    <Setter Property="Background" Value="{DynamicResource OmpInvisibleBrush}"/>
    <!--{DynamicResource {x:Static SystemColors.ControlBrushKey}-->
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected"/>
    <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
    <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGrid}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True" UseLayoutRounding="True">
                    <ScrollViewer x:Name="DG_ScrollViewer" Focusable="False" UseLayoutRounding="True">
                        <ScrollViewer.Template>
                            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                                <Grid UseLayoutRounding="True">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="*"/>
                                        <RowDefinition Height="Auto"/>
                                    </Grid.RowDefinitions>
                                    <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" Grid.ColumnSpan="2" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Grid.Row="1" UseLayoutRounding="True"/>
                                    <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Grid.Row="1" UseLayoutRounding="True" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
                                    <Grid Grid.Column="1" Grid.Row="2" UseLayoutRounding="True">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGrid}}}"/>
                                            <ColumnDefinition Width="*"/>
                                        </Grid.ColumnDefinitions>
                                        <ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" UseLayoutRounding="True" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
                                    </Grid>
                                </Grid>
                            </ControlTemplate>
                        </ScrollViewer.Template>
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" UseLayoutRounding="True"/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsGrouping" Value="True"/>
                <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="False"/>
            </MultiTrigger.Conditions>
            <Setter Property="ScrollViewer.CanContentScroll" Value="False"/>
        </MultiTrigger>
    </Style.Triggers>
</Style>

问题截图

问题截图


后续调整尝试

我添加了以下样式设置来排查问题:

<!-- Custom DataGrid -->
<Style TargetType="DataGrid">
    <Setter Property="AlternatingRowBackground" Value="Yellow" />
    <Setter Property="RowBackground" Value="LightBlue" />
    <Setter Property="HeadersVisibility" Value="All" />
    <Setter Property="RowHeaderWidth" Value="10" />

调整后截图

调整后截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:23:13