在WPF网格/列表中跨越多列的最佳方法?

时间:2010-09-24 19:01:56

标签: wpf datagrid listbox grid columnspan

我在WPF中编写了一个自定义用户控件来显示一些数据。我想在列表中显示此usercontrol,但我还想提供多个列标题(匹配用户cotrol上的一些属性),以便用户可以对usercontrol中包含的属性进行排序。

我不确定最好的办法。

我目前有一个ListBox显示这些用户控件,但ListBox没有标题,我无法弄清楚如何在ListBox上放置多个标题。

理想情况下,我喜欢这样的事情:

Header1   Header2  Header3   Header4
[UserControlThatSpansAllFourColumns]

我的另一个想法是使用DataGrid并以某种方式让每个项目跨越多个列,但到目前为止我也无法解决这个问题。

如果有人有任何提示,我会欢迎他们!

1 个答案:

答案 0 :(得分:3)

好吧,这在任何情况下都不是“最好的方法”,但我只是把它扔进去。一种类似你需要的工作方式是使用带有{{1的自定义ItemContainerStyle的ListView而不是默认的<ContentPresenter>。这个简短的XAML在某种程度上证明了这一点:

<GridViewRowPresenter>

在这里,您获得了列标题,这些项目跨越整个列表视图。然而,在这个解决方案中,项目的渲染在它自己的世界中是一种。它并没有真正连接到为ListView定义的列。所以我想一种让这项工作更好的方法是提供你自己的<ListView> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListViewItem"> <ContentPresenter/> </ControlTemplate> </Setter.Value> </Setter> </Style> </ListView.ItemContainerStyle> <ListView.View> <GridView> <GridViewColumn Header="Header1"/> <GridViewColumn Header="Header2"/> </GridView> </ListView.View> <Button>Item1</Button> <Button>Item2</Button> </ListView> 实现,它实际上考虑了父列表视图中定义的GridViewColumns。

无论如何,希望这会有所帮助。

相关问题