<meta content="MSHTML 6.00.2900.3199" name="GENERATOR">
<style></style>2007年09月05日 16:34:00
在 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)
我的扩展方法代码如下:
/// >summary/// 郭红俊的扩展方法
/// >/summarypublic 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) 提到的注意事项。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1773467
分享到:
相关推荐
自定义 TreeView控件样式(自定义节点样式大小、形状)。
WPF TreeView拖拽节点变换位置
在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提供强大的ItemTemplate模板功能和自定义样式,那我们可以自己写一个这样的控件供自己使用。
基于C# winform,写的一个自定义TreeView和TreeNode,可以在每个自定义节点旁添加按钮。
实现树的节点增加、删除、拖拽、修改节点名等
WPF的TreeView实现起来,我感觉有点像VM(View-Model)模式,就像WinForms中的DataGrid,控件负责显示,数据在DataTable中。那么我们在实现TreeView时,也需要用这样的思路,数据在Model中,控件是View负责显示。 我...
窗体左右分割,单击左边树节点,右边加载相对应的窗体
扩展WPF的TreeView,完成数据绑定和拖拽功能。 WPF看了很长时间了,但一直没怎么动手实践,正好任务需要,扩展了WPF的标准TreeView控件,并作为基础控件,支持下面的功能: 数据绑定 拖拽
摘要:C#源码,数据库应用,树状节点 C#修改Treeview中的节点文本实例源码,实现步骤:在文件头部声明与数据库操作有关的命名空间,声明一个执行SQL语句的对象,定义一个数据库连接字符串,设置treeView1的可编辑属性...
TreeView动态添加,修改,删除等功能 代码大全
自定义的美化TreeView源码和对应demo,样式好看,对初学者是很好的学习资料,然后也可用于项目中
是用WPF实现的功能,是在外国网站上找到的, 按F2可以修改节点名字! 用UserControl1.xaml的自定义控件来实现 用到DataTemplate模板。值得学习。
可实现插入、删除、节点上下移等功能。注:只能新建一个根节点。
觉得树控件的背景白色太单调了?这个类可以非常方便简单的帮您的树控件加上背景图片,让您的界面更加美观:)
在winfrom中,treeview失去焦点后离开最后一次点击的节点仍然高亮显示,以突出用户选择。
本人借鉴了wpf treeview控件绑定数据的例子,在winform中实现了根据节点信息生成树的功能,希望能给别人的开发带来启示,欢迎批评指正。
C_实现树型结构TreeView节点拖拽的简单功能,附全部源码,供有需要的参考
treeview与listview联合起来,用treeview显示层次结构,用listview显示每一个节点的属性信息,即每个节点显示该节点的多栏信息。克服了以前treeview显示时节点只能显示一段信息,而不能显示多段信息的缺点
这个简单的WPF用户控件允许使用HierarchicalDataTemplate在TreeView控件中就地编辑特定项目的标头
自定义TreeView控件,通过递归地方式实现显示xml文件,可以通过右键增加兄弟节点、子节点,并且可以删除结点,可以用来学习如何手工绑定数据到TreeView控件中