有没有办法自动扩展在WPF树视图的所有节点?我搜索甚至没有发现在TreeView属性的扩展功能。

由于

有帮助吗?

解决方案

可以设置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属性绑定到相应的一个从模型。更多的例子参见大文章从约什 - 史密斯在CodeProject:使用视图模型简化的WPF的TreeView图案

其他提示

这是我使用:

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

卡罗的答案是更好,因为它打开各级

此改进了用少量更简洁代码的例子,例如,

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

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

的Xaml:

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

另一种的程序化的方式来操纵的树项目,通过C#代码也许完全膨胀时,根节点上使用TreeViewItem.ExpandSubTree()命令。

private void ExpandFirstRootNode()
{
   TreeViewControl.Items[0].ExpandSubtree();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top