Вы можете поместить DataGrid
на панель Grid
и затем привязать его ширину ColumnDefinitions
к ширине заголовков столбцов. Что-то вроде:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding ElementName=datagrid, Path=RowHeaderWidth}" />
<ColumnDefinition Width="{Binding ElementName=ColumnD, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=ColumnE, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=ColumnF, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=ColumnG, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=ColumnH, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=ColumnI, Path=ActualWidth}" />
</Grid.ColumnDefinitions>
<DataGridColumnHeader Grid.Column="1" Grid.ColumnSpan="2" Content="A" HorizontalContentAlignment="Center" />
<DataGridColumnHeader Grid.Column="3" Grid.ColumnSpan="2" Content="B" HorizontalContentAlignment="Center" />
<DataGridColumnHeader Grid.Column="5" Grid.ColumnSpan="2" Content="C" HorizontalContentAlignment="Center" />
</Grid>
<DataGrid Name="datagrid" AutoGenerateColumns="False"
Grid.Row="1" RowHeaderWidth="0">
<DataGrid.Columns>
<DataGridTextColumn Header="D" Width="*" x:Name="ColumnD" />
<DataGridTextColumn Header="E" Width="*" x:Name="ColumnE" />
<DataGridTextColumn Header="F" Width="*" x:Name="ColumnF" />
<DataGridTextColumn Header="G" Width="*" x:Name="ColumnG" />
<DataGridTextColumn Header="H" Width="*" x:Name="ColumnH" />
<DataGridTextColumn Header="I" Width="*" x:Name="ColumnI" />
</DataGrid.Columns>
</DataGrid>
</Grid>
Мой XAML не учитывает границы заголовка, но вы можете легко включить их, используя конвертер, который получает ActualWidth
и суммирует его с толщиной границы.
Надеюсь, это поможет вам.