在WPF Toolkit的DataGrid中跨越多行记录

时间:2010-07-05 17:35:22

标签: wpf wpfdatagrid

是否可以为WPF Toolkit的DataGrid设置样式,以便数据记录可以跨越多行。来自商业控制的Example screen shot

谢谢,

2 个答案:

答案 0 :(得分:4)

对于ListView,没有工具包DataGrid或GridView,没有。

然而您可能会对自己的实施感到满意,因为我最近发现您可以使用GridViewHeaderRowPresenterMSDN reference),将Columns属性设置为你想要的列:这会给你一个标题行。

然后,您可以使用GridViewRowPresenterMSDN reference),将其附加到相同的Columns集合中,然后您的行和标题中的列将被链接(调整标题大小,列更改)。

请看这里的一个好例子:

  

http://msdn.microsoft.com/en-us/library/ms752313.aspx

为了获得叠加效果,您可以创建ListViewListBox,并为每个项目输出一对垂直堆叠的GridViewRowPresenter GridViewHeaderRowPresenter 1}}控件,每个控件绑定到一个单独的列集合。然后在您自己的自定义标题中(在控件上方),您可以使用一对{{1}}控件执行相同的操作。

然后您可以添加您想要的任何其他位,例如他们在示例屏幕截图中包含的文本/标签。

没有理由不这样做。它不是一个预先构建的解决方案,但可以通过干净的编码,它不是一个黑客,你可以完全控制它的外观和工作方式!添加排序等也很容易,MSDN也有一个例子。

希望有所帮助 - 对此细节的任何疑问请在此处添加评论!

答案 1 :(得分:4)

看起来该屏幕截图中的控件通过将图片右侧的每一列中的单元格划分为多行来创建行跨度的错觉。也许你可以用同样的方式实现你正在寻找的行间距效果。

<tk:DataGrid AutoGenerateColumns="False">
    <tk:DataGrid.Columns>
        <tk:DataGridTextColumn Header="ID" Binding="{Binding ID}" />
        <tk:DataGridTemplateColumn Header="Photo">
            <tk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="{Binding Photo}" />
                </DataTemplate>
            </tk:DataGridTemplateColumn.CellTemplate>
        </tk:DataGridTemplateColumn>
        <tk:DataGridTemplateColumn>
            <tk:DataGridTemplateColumn.Header>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock Grid.Row="0">FirstName</TextBlock>
                    <TextBlock Grid.Row="1">LastName</TextBlock>
                </Grid>
            </tk:DataGridTemplateColumn.Header>
            <tk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <TextBlock Grid.Row="0" Text="{Binding FirstName}" />
                        <TextBlock Grid.Row="1" Text="{Binding LastName}" />
                    </Grid>
                </DataTemplate>
            </tk:DataGridTemplateColumn.CellTemplate>
        </tk:DataGridTemplateColumn>
    </tk:DataGrid.Columns>
</tk:DataGrid>