51

有没有办法从 WPF 中的树视图中自动展开所有节点?我搜索并没有在树视图属性中找到扩展功能。

谢谢

4

5 回答 5

84

您可以设置 ItemContainerStyle 并使用 IsExpanded 属性。

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Grid>
      <TreeView>
         <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
               <Setter Property="IsExpanded" Value="True"/>
            </Style>
         </TreeView.ItemContainerStyle>
         <TreeViewItem Header="Header 1">
            <TreeViewItem Header="Sub Item 1"/>
         </TreeViewItem>
         <TreeViewItem Header="Header 2">
            <TreeViewItem Header="Sub Item 2"/>
         </TreeViewItem>
      </TreeView>
   </Grid>
</Page>

如果您需要从代码中执行此操作,您可以为您的树视图项目编写视图模型,并将 IsExpanded 属性绑定到模型中的相应属性。有关更多示例,请参阅 Josh Smith 在 CodeProject 上的精彩文章:使用 ViewModel 模式简化 WPF TreeView

于 2009-09-28T15:27:54.070 回答
5

这就是我使用的:

private void ExpandAllNodes(TreeViewItem rootItem)
{
    foreach (object item in rootItem.Items)
    {
        TreeViewItem treeItem = (TreeViewItem)item;

        if (treeItem != null)
        {
            ExpandAllNodes(treeItem);
            treeItem.IsExpanded = true;
        }
    }
}

为了使其工作,您必须在根节点的 foreach 循环中调用此方法:

// this loop expands all nodes
foreach (object item in myTreeView.Items)
{
    TreeViewItem treeItem = (TreeViewItem)item;

    if (treeItem != null)
    {
        ExpandAllNodes(treeItem);
        treeItem.IsExpanded = true;
    }
}
于 2009-09-28T15:27:40.710 回答
3

如果您想手动扩展,您可以尝试

xml:

<TreeView x:Name="TreePeople">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="True" />
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView> 

C#:

bool Expanded = false; 
// The event subscription method (for a button click)
private void ButtonExpand__Click(object sender, RoutedEventArgs e)
{
    Expanded = !Expanded;
    Style Style = new Style
    {
        TargetType = typeof(TreeViewItem)
    };

    Style.Setters.Add(new Setter(TreeViewItem.IsExpandedProperty, Expanded));
    TreePeople.ItemContainerStyle = Style;
}
于 2014-06-04T18:44:37.020 回答
2

卡罗的答案更好,因为它打开了所有级别

这通过更简洁的代码示例改进了该示例。

    private void ExpandAllNodes(TreeViewItem treeItem)
    {
        treeItem.IsExpanded = true;  
        foreach (var childItem in treeItem.Items.OfType<TreeViewItem>())
        {
                ExpandAllNodes(childItem);
        }
    }

使用这行代码调用它

TreeViewInstance.Items.OfType<TreeViewItem>().ToList().ForEach(ExpandAllNodes);
于 2014-04-03T19:17:00.163 回答
0

另一种操作树项完全扩展的编程方法(可能通过 c# 代码)是TreeViewItem.ExpandSubTree()在根节点上使用命令。

private void ExpandFirstRootNode()
{
   TreeViewControl.Items[0].ExpandSubtree();
}
于 2019-05-20T14:20:45.177 回答