如何在WPF GridView中创建具有列跨度的多个标题?

3

我希望能够在 WPF GridView 中通过添加一个额外的标题行来将一些列“分组”,该标题行跨越 GridView 中的几个列。

在 ASP.Net 中,使用 Repeater 可以实现这样的效果:

<asp:Repeater ID="myRepeater">
    <HeaderTemplate>
       <table>
       <tr>
          <td></td>
          <td colspan="2">Group 1</td>
          <td colspan="2">Group 2</td>
          <td></td>
       </tr>
       <tr>
          <td>Value 1 Header</td>
          <td>Value 2 Header</td>
          <td>Value 3 Header</td>
          <td>Value 4 Header</td>
          <td>Value 5 Header</td>
          <td>Value 6 Header</td>
       </tr>
    </HeaderTemplate>
    <ItemTemplate>
       <tr>
          <td>Value 1</td>
          <td>Value 2</td>
          <td>Value 3</td>
          <td>Value 4</td>
          <td>Value 5</td>
          <td>Value 6</td>
       </tr>
    </ItemTemplate>
    <FooterTemplate>
       </table>
    </FooterTemplate>
 </asp:Repeater>

因此,“Value 1”只会有一个标题,而“Value 2”和“Value 3”则会在其上方有一个分组标题和一个标题。

您对如何在WPF中执行此类操作有何想法?谢谢。

1个回答

3
我使用Wpf中的DataGrid完成了这个操作,以下是示例代码:
    <toolkit:DataGrid x:Name="dgValue" AutoGenerateColumns="False">
        <toolkit:DataGrid.Columns>
            <toolkit:DataGridTemplateColumn>
                <toolkit:DataGridTemplateColumn.Header>
                    <Grid Width="150">
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.ColumnSpan="2" HorizontalAlignment="Center" Text="Item"/>
                        <TextBlock Grid.Row="1" Text="SubItem1"/>
                        <TextBlock Grid.Row="1" Grid.Column="1" Text="SubItem2"/>
                    </Grid>
                </toolkit:DataGridTemplateColumn.Header>
                <toolkit:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid Width="150">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="{Binding SubItem1}" />
                            <TextBlock Grid.Column="1" Text="{Binding SubItem2}" />
                        </Grid>
                    </DataTemplate>
                </toolkit:DataGridTemplateColumn.CellTemplate>
            </toolkit:DataGridTemplateColumn>
        </toolkit:DataGrid.Columns>
    </toolkit:DataGrid>

看起来不错,但是你似乎必须定义列的宽度?我希望(就像在ASP.net中一样)所有列的宽度都可以是动态的。如果您省略宽度,那么它看起来可能无法正确对齐?还是我理解有误? - ChrisHDog
1
在 MSDN 上有一个类似的答案可用于“超级标题”(http://social.msdn.microsoft.com/Forums/en/wpf/thread/1e414159-70f6-4be3-9be5-56e4f3278366)。 - Jon Peterson
GridView有没有类似的控件,而不是DataGrid? - CrookedBadge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接