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

