Наборы столбцов DataGrid с заголовком для каждого набора - PullRequest
0 голосов
/ 26 июня 2018

Я хотел создать сетку данных WPF, которая отображает определенное количество наборов столбцов для каждой категории, как показано на рисунке ниже: введите описание изображения здесь

Может кто-нибудь помочь мне, как мы можем добиться этого с wpf Datagrid?

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете поместить 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 и суммирует его с толщиной границы.

Надеюсь, это поможет вам.

...