黑马程序员 WPF中的树

原创 2013年12月04日 13:35:22

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

逻辑树:
在 WPF 中,可使用属性向元素中添加内容。例如,使用 ListBox 控件的 Items 属性可向该控件中添加项。通过此方式,可将项放置到 ListBox 控件的 ItemCollection 中。若要向 DockPanel 中添加元素,可使用其 Children 属性。此时,将向 DockPanel 的 UIElementCollection 中添加元素。有关代码示例,请参见如何:动态添加元素。


请注意,不需要显式属性元素标记,因为 XAML 读取器在创建对象(创建应用程序的可执行文件的运行时对象表示形式)时会推断属性元素(不会将属性元素加入逻辑树(属性元素中的.标识了属性元素)。


逻辑树用途
逻辑树的存在用途是使内容模型可以容易地循环访问其可能包含的子元素,从而可以对内容模型进行扩展。此外,逻辑树还为某些通知提供了框架,例如当加载逻辑树中的所有元素时。


可视化树:
WPF 中除了逻辑树的概念,还存在可视化树的概念。可视化树描述由 Visual 基类表示的可视化对象的结构。为控件编写模板时,将定义或重新定义适用于该控件的可视化树。对于出于性能和优化原因想要对绘图进行较低级别控制的开发人员来说,他们也会对可视化树感兴趣。作为常规 WPF 应用程序编程一部分的可视化树的一个公开情况是,路由事件的事件路由大多数情况下遍历可视化树,而不是逻辑树。这种微妙的路由事件行为可能不会很明显,除非您是控件作者。在可视化树中路由使得在可视化级别实现组合的控件能够处理事件或创建事件 setter。


树、内容元素和内容宿主
内容元素(从 ContentElement 派生的类)不是可视化树的一部分;内容元素不从 Visual 继承并且没有可视化表示形式。若要完全在 UI 中显示,则必须在既是 Visual,也是逻辑树元素(通常是 FrameworkElement)的内容宿主中承载 ContentElement。您可以使用概念说明,内容宿主有点类似于内容的“浏览器”,它选择要在该宿主控制的屏幕区域中显示内容的方式。承载内容时,可以使内容成为通常与可视化树关联的某些树进程的参与者。通常,FrameworkElement 宿主类包括实现代码,该代码用于通过内容逻辑树的子节点将任何已承载的 ContentElement 添加到事件路由,即使承载内容不是真实可视化树的一部分时也将如此。这样做是必要的,以便 ContentElement 可以为路由到除其自身之外的任何元素的路由事件提供来源。




树遍历
LogicalTreeHelper 类为逻辑树遍历提供 GetChildren、GetParent 和 FindLogicalNode 方法。在大多数情况下,不需要遍历现有控件的逻辑树,因为这些控件几乎总是将其逻辑子元素公开为专用集合属性,该属性支持集合 API(如 Add、索引器等等)。对于不选择从预期控件模式(例如已定义了集合属性的 ItemsControl 或 Panel)派生以及打算提供其自己的集合属性支持的控件作者,树遍历主要是他们使用的一种方案。


可视化树还支持用于可视化树遍历的帮助器类 VisualTreeHelper。无法通过控件特定的属性方便地公开可视化树,因此,如果您的编程方案必须遍历可视化树,建议您使用 VisualTreeHelper 类。有关更多信息,请参见 Windows Presentation Foundation 图形呈现概述。




“折叠”图像资源和树
资源查找基本上遍历逻辑树。不在逻辑树中的对象可以引用资源,但查找将从该对象连接到逻辑树的位置开始。仅逻辑树节点可以有包含 ResourceDictionary 的 Resources 属性,因此这意味着,遍历可视化树来查找资源没有好处。


但是,资源查找也可以超出直接逻辑树。对于应用程序标记,资源查找可以向上继续,直到应用程序资源以及主题支持和系统值。如果资源引用是动态的,则主题本身也可以引用主题逻辑树之外的系统值。有关资源和查找逻辑的更多信息,请参见资源概述。

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net

UIElementCollection

逻辑树: 逻辑树描述的是用户界面元素之间的关系,它主要负责: 传承依赖属性的值设定动态资源的引用为绑定查询元素的名称传递路由事件 视图树: 视图树包括每一个逻辑元素的模板中的所有视图元素。它的责任是...
  • paxhujing
  • paxhujing
  • 2015年08月20日 09:57
  • 610

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1520

黑马程序员学习笔记 Java的三大框架

如果做javaweb开发,spring是一定要学的,现在主流还是ssh,就是strurs+hibernate+spring,其中hibernate是持久层,用来持久化数据库操作的,如果不喜欢可以学点别...
  • Mr_April
  • Mr_April
  • 2015年07月03日 17:12
  • 1535

黑马程序员—黑马的学习环境没有亲身经历的人是很难体会的!!!

文章来源:黑马程序员,黑马论坛     公元2013年1月10号我拖着沉重的行李箱和对未来的憧憬来到了黑马,公元2013年6月7号我怀抱着满满的知识和对老师的不舍离开了黑马。到现在离开黑马也有一个...
  • heima_28
  • heima_28
  • 2014年08月26日 15:16
  • 1413

黑马程序员--Oracle学习_day06

----------  android培训 、java培训、期待与您交流! ---------- 学习目标:1,理解oracle的pl/sql的概念   2,掌握pl/sql编程技术(...
  • xpaibeyond
  • xpaibeyond
  • 2015年01月16日 14:28
  • 203

黑马程序员—怎么去黑马?吃住问题解答

文章来源:黑马程序员,黑马论坛
  • heima_25
  • heima_25
  • 2014年08月24日 13:24
  • 1142

黑马程序员--一个为进入黑马云六的C++屌丝的28个日夜

首先我要告诉大家,我是一个在大学学了三年C++的人,可能你们会问我,学C++不是挺好的?干嘛突然间要重新学习java呢?况且C++以后的发展不也挺好吗?        我应该怎么回答你们呢?这也是我...
  • heima_hb5
  • heima_hb5
  • 2014年08月22日 08:52
  • 2401

黑马程序员--一段给后者的面试总结

文章来源:黑马程序员, 北京之旅,行北京万事,通百姓生活。其实,我也是个农村出来的孩子,大学没毕业就来北京参加“黑马”,毕业之后,还是没有任何的机遇与机会让我能在那里一展雄威,这就是我们这些菜鸟的悲...
  • heima_hb6
  • heima_hb6
  • 2014年08月24日 13:51
  • 526

黑马程序员:Hibernate基础知识

android培训、java培训
  • u012159707
  • u012159707
  • 2013年09月26日 15:42
  • 585

关于我在黑马程序员培训毕业后的亲身体验

首先申明:我本人已经于2016年5月份在广州传智播客java培训完毕业,和黑马程序员官网没有任何的利益往来,也没有人出钱给我帮他们做软文推广,这是我在黑马程序员的亲身体验,不存在虚构。...
  • wjycgl
  • wjycgl
  • 2017年04月20日 15:27
  • 1641
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员 WPF中的树
举报原因:
原因补充:

(最多只允许输入30个字)