WPF中的AutoExpand树视图

Dav*_*lle 44 wpf treeview expand

有没有办法在WPF中自动扩展树视图中的所有节点?我搜索了,甚至没有在treeview属性中找到扩展函数.

谢谢

Anv*_*aka 69

您可以设置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>
Run Code Online (Sandbox Code Playgroud)

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


Car*_*rlo 5

这是我使用的:

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

        if (treeItem != null)
        {
            ExpandAllNodes(treeItem);
            treeItem.IsExpanded = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

    if (treeItem != null)
    {
        ExpandAllNodes(treeItem);
        treeItem.IsExpanded = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 嗨卡罗.如果您在Items集合中有与TreeViewItem不同的内容,则无法使用此功能.如果你想确保这种方法在任何情况下都有效,你应该使用TreeView对象中的ItemContainerGenerator并调用它的ContainerFromItem()方法. (2认同)

小智 5

如果你想手动扩展你可以尝试

XML:

<TreeView x:Name="TreePeople">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="True" />
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView> 
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)