1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > wpf展开树节点_WPF中展开一个TreeView控件的所有树节点

wpf展开树节点_WPF中展开一个TreeView控件的所有树节点

时间:2020-05-05 08:32:40

相关推荐

wpf展开树节点_WPF中展开一个TreeView控件的所有树节点

在 Windows Form 应用中,我们碰到需要展开一个TreeView 控件的所有树节点的时候很简单,微软已经替我们提供了ExpandAll 方法,我们只要简单的一行代码tv_QTree.ExpandAll();就可以了。即 System.Windows.Forms 命名空间的 TreeView.ExpandAll 方法 。

在WPF中,我们会发现,System.Windows.Controls.TreeView 中没有了 ExpandAll 方法。唯一跟展开有关系的属性和方法就是每一个TreeViewItem 中有一个属性IsExpanded 属性。这个属性定义这个节点是否打开。MSDN帮助如下:

Gets or sets whether the nested items in a TreeViewItem are expanded or collapsed. This is a dependency property.

这时候如何办呢? 很简单,自己写个递归,遍历这个树的每一个子节点,然后把每一个子节点的 IsExpanded 设置为 true.

你可以通过以下几个链接看到这个解决方案:

我们可以在上面解决方案基础上进一步发展。

用扩展方法来给 System.Windows.Controls.TreeView 类扩展个 ExpandAll方法方法。有关扩展方法的一些基础知识可以参看我之前的博客:C#3.0 中的扩展方法 (Extension Methods)

我的扩展方法代码如下:

///

/// 郭红俊的扩展方法

///

public static class ExtensionMethods

{

///

///

///

///

public static void ExpandAll(this System.Windows.Controls.TreeView treeView)

{

ExpandInternal(treeView);

}

///

///

///

///

private static void ExpandInternal(System.Windows.Controls.ItemsControl targetItemContainer)

{

if (targetItemContainer == null) return;

if (targetItemContainer.Items == null) return;

for (int i = 0; i < targetItemContainer.Items.Count; i++)

{

System.Windows.Controls.TreeViewItem treeItem = targetItemContainer.Items[i] as System.Windows.Controls.TreeViewItem;

if (treeItem == null) continue;

if (!treeItem.HasItems) continue;

treeItem.IsExpanded = true;

ExpandInternal(treeItem);

}

}

}

Trackback: http://tb./TrackBack.aspx?PostId=1773467

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。