WPF中展开一个TreeView控件的所有树节点——出自《IT168》
2010-12-09 10:15
573 查看
在 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.
你可以通过以下几个链接看到这个解决方案:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=976861&SiteID=1
http://shevaspace.spaces.live.com/blog/cns!FD9A0F1F8DD06954!463.entry
http://blogs.msdn.com/okoboji/archive/2006/09/20/764019.aspx
我们可以在上面解决方案基础上进一步发展。
用扩展方法来给 System.Windows.Controls.TreeView 类扩展个 ExpandAll方法方法。有关扩展方法的一些基础知识可以参看我之前的博客:C#3.0 中的扩展方法 (Extension Methods)
我的扩展方法代码如下:
扩展方法的使用方法也请参看C#3.0 中的扩展方法 (Extension Methods) 提到的注意事项。
在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.
你可以通过以下几个链接看到这个解决方案:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=976861&SiteID=1
http://shevaspace.spaces.live.com/blog/cns!FD9A0F1F8DD06954!463.entry
http://blogs.msdn.com/okoboji/archive/2006/09/20/764019.aspx
我们可以在上面解决方案基础上进一步发展。
用扩展方法来给 System.Windows.Controls.TreeView 类扩展个 ExpandAll方法方法。有关扩展方法的一些基础知识可以参看我之前的博客:C#3.0 中的扩展方法 (Extension Methods)
我的扩展方法代码如下:
/// <summary> /// </summary> public static class ExtensionMethods { /// <summary> /// /// </summary> /// <param name="treeView"></param> public static void ExpandAll(this System.Windows.Controls.TreeView treeView) { ExpandInternal(treeView); } /// <summary> /// /// </summary> /// <param name="targetItemContainer"></param> 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); } } }
扩展方法的使用方法也请参看C#3.0 中的扩展方法 (Extension Methods) 提到的注意事项。
相关文章推荐
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF如何展开所有TreeView树节点?
- 浅谈WPF中对控件的位图特效——出自《IT168》
- WPF TreeView 展开和闭合所选择的节点
- WPF TreeView如何展开到某个节点
- vs2005 TreeView控件 根节点点击文字即展开
- WPF: TreeView控件 获取选中的文本节点内容
- TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
- treeview展开一个节点就关闭其他节点
- 在.Net Framework1.1的环境下,调用TreeView控件,生成树图,点选父节点,则所有的子结点也选中,取消选中的父节点下的子结点,则父节点也取消选中状态。
- WPF中控件与控件值的绑定——出自《IT168》
- TreeView展开一个节点后,折叠其它节点
- 使用JavaScript展开/折叠TreeView中所有节点
- 【原】用使用JavaScript展开/折叠TreeView中所有节点(Expand and Collapse All Nodes of asp.net Treeview on the client with javascript)
- 一个快捷访问 TreeView 控件节点的帮助