这需要一些步骤。首先,我们需要关闭 DataGrid 中的 GridLines,这样我们才能获得“Gap Cells”。我们将把 GridLines 留给 DataGridCells。我们还必须指定一个 GridLinesBrush。我们无法为 DataGridColumn 创建“DataGridGapColumn”样式,因为它不是从 FrameworkElement 派生的,因此我们必须满足 GapCellStyle 和 GapHeaderStyle。然后我们可以像这样创建一个“DataGridGapColumn”
<DataGridTextColumn Width="100"
CellStyle="{StaticResource DataGridGapCell}"
HeaderStyle="{StaticResource DataGridGapHeader}"/>
一些列和间隙列的示例
<DataGrid x:Name="dataGrid"
GridLinesVisibility="None"
HorizontalGridLinesBrush="Black"
...>
<DataGrid.Resources>
<!-- Regular Cell Style -->
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0,0,1,1"/>
<Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
</Style>
<!-- Gap Cell Style -->
<Style x:Key="DataGridGapCell" TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
<Setter Property="BorderThickness" Value="0,0,1,0"/>
<Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
</Style>
<!-- Gap ColumnHeader Style -->
<Style x:Key="DataGridGapHeader" TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Header 1" Binding="{Binding Header1}"/>
<DataGridTextColumn Width="100" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/>
<DataGridTextColumn Header="Header 2" Binding="{Binding Header2}"/>
<DataGridTextColumn Header="Header 3" Binding="{Binding Header3}"/>
<DataGridTextColumn Width="50" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/>
<DataGridTextColumn Header="Header 4" Binding="{Binding Header4}"/>
<DataGridTextColumn Header="Header 5" Binding="{Binding Header5}"/>
</DataGrid.Columns>
</DataGrid>
更新
您可以将样式放在 ResourceDictionary 或 Window.Resouces 中。示例
<Window.Resources>
<Style x:Key="DataGridGapStyle" TargetType="DataGrid">
<Setter Property="GridLinesVisibility" Value="None"/>
<Setter Property="HorizontalGridLinesBrush" Value="Black"/>
</Style>
<!-- Regular Cell Style -->
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="1,0,1,1"/>
<Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
</Style>
<!-- Gap Cell Style -->
<Style x:Key="DataGridGapCell" TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
<Setter Property="BorderThickness" Value="0,0,0,0"/>
<Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/>
</Style>
<!-- Gap ColumnHeader Style -->
<Style x:Key="DataGridGapHeader" TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="{Binding ElementName=dataGrid, Path=Background}"/>
</Style>
</Window.Resources>
<Grid>
<DataGrid x:Name="dataGrid"
Style="{StaticResource DataGridGapStyle}"
AutoGenerateColumns="False"
ItemsSource="{Binding MyCollection}">
<DataGrid.Columns>
<DataGridTextColumn Header="Header 1" Binding="{Binding Header1}"/>
<DataGridTextColumn Width="100" CellStyle="{StaticResource DataGridGapCell}" HeaderStyle="{StaticResource DataGridGapHeader}"/>
<DataGridTextColumn Header="Header 2" Binding="{Binding Header2}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>