65.9K
CodeProject 正在变化。 阅读更多。
Home

TreeListView

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (22投票s)

2008 年 4 月 6 日

CPOL

1分钟阅读

viewsIcon

206139

downloadIcon

10024

带有多列的 TreeView

treelistview.jpg

引言

此控件旨在以 TreeView 的形式显示分层数据,同时提供为每个项目附加额外信息的能力。

背景

我需要以分层结构呈现数据,但要求为每个项目显示额外信息。 最初,我将所有这些信息附加到 TreeNodeItem 的文本中,这对于用户来说相当不清楚。

Using the Code

要在您自己的应用程序中使用多列 TreeView,请在任何窗口或控件中声明该控件。 TreeListView 暴露了 ListView 的所有属性,以及 AllowsColumnReorderColumns

<local:TreeListView AllowsColumnReorder="True">
    <local:TreeListView.Columns>
        ...
    </local:TreeListView.Columns>
    ...
</local:TreeListView>

这两个属性与 GridViewAllowsColumnReorderColumns 属性相关联,后者记录在 此处

分层数据模板

为了让树能够检索子节点,您必须声明一个 HierarchicalDataTemplate 或一个 DataTemplateSelector

TreeListView 仅将使用 HierarchicalDataTemplateDataTemplateSelectorItemsSource 属性,因为所有信息都以相同的方式可视化(以行的方式)。 因此,以下声明就足够了

<local:TreeListView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Children}"/>
</local:TreeListView.ItemTemplate>

Columns

声明至少一列至关重要,TreeListView 将使用该列来可视化数据。 MSDN 提供了关于声明 GridViewColumn 的足够信息,因此我将不再赘述。

声明 GridViewColumn 的唯一新之处在于,至少一列必须包含一个 TreeListViewExpander,它是一个可以展开其行并缩进其列中所有内容的 ToggleButton

<GridViewColumn>
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <!--The Expander Button (can be used in any column 
                (typically the first one))-->
                <local:TreeListViewExpander/>
                <!--The data to display in this column-->
                <TextBlock Text="{Binding}"/>
            </StackPanel>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

就是这样!

关注点

实现 GridView 的所有功能可能是一个好主意。 不幸的是,我现在没有时间这样做。

历史

  • 2008 年 4 月 6 日
    • 首次发布
    • 修复了文件下载
© . All rights reserved.