6

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

我不确定解决这个问题的最佳方法。

我目前有一个显示这些用户控件的 ListBox,但 ListBox 没有标题,我不知道如何在 ListBox 上放置多个标题。

理想情况下,我想要这样的东西:

Header1   Header2  Header3   Header4
[UserControlThatSpansAllFourColumns]

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

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

4

1 回答 1

3

好的,这在任何情况下都不是“最好的方法”,但我只是把它扔进去。一种像你需要的那样工作的方法是将 ListView 与使用 a<ContentPresenter>而不是 default的自定义 ItemContainerStyle 一起使用<GridViewRowPresenter>。这个简短的 XAML 在某种程度上证明了这一点:

<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>

在这里,您可以获得列标题,并且项目跨越整个列表视图。然而,在这个解决方案中,项目的渲染是一种自成一体的世界。它并没有真正连接到为 ListView 定义的列。因此,我想使这项工作更好的一种方法是提供您自己的<RowPresenter>实现,该实现实际上考虑了父列表视图中定义的 GridViewColumns。

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

于 2010-09-24T21:08:21.683 回答