代码之家  ›  专栏  ›  技术社区  ›  Chris Holmes

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

  •  6
  • Chris Holmes  · 技术社区  · 14 年前

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

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

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

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

    Header1   Header2  Header3   Header4
    [UserControlThatSpansAllFourColumns]
    

    我的另一个想法是使用一个数据报,并以某种方式让每个项目跨越多个列,但到目前为止,我也无法理解这一点。

    如果有人有任何建议,我欢迎他们!

    1 回复  |  直到 13 年前
        1
  •  3
  •   ASanch    14 年前

    好吧,无论如何这不是“最好的方法”,但我还是把它扔了。一种类似于您需要的工作方式是使用带有自定义项容器样式的ListView,该样式使用 <ContentPresenter> 而不是默认值 <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> 实际考虑父ListView中定义的GridViewColumns的实现。

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