WPF元素树各种用途解析
创始人
2024-06-18 10:51:16
0

WPF元素树是WPF中一个非常重要的结构。在初学者学习使用WPF的时候,需要深入的了解这一结果,才能方便以后的熟练操作。#t#

如果使用 XAML 创建应用程序页,则将基于标记中元素的嵌套关系创建树结构。
如果使用代码创建应用程序,则将基于为属性(实现给定元素的内容模型)指定属性值的方式创建树结构。
在 Windows Presentation Foundation (WPF) 中,处理和使用概念说明元素树的方法实际上有两种:即逻辑树和可视化树。

WPF元素树之逻辑树用途

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

此外,在 Resources 集合的逻辑树中首先向上查找初始请求元素,然后再查找父元素,这样可以解析资源引用。当同时存在逻辑树和可视化树时,将使用逻辑树进行资源查找。

WPF元素树之可视化树

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

WPF元素树之树遍历

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

可视化树还支持用于可视化树遍历的帮助器类 VisualTreeHelper。无法通过控件特定的属性方便地公开可视化树,因此,如果您的编程方案必须遍历可视化树,建议您使用 VisualTreeHelper 类。

WPF元素树之“树”形式路由事件的路由

如前所述,路由事件的路由可有效地向上遍历或向下遍历树,这要取决于该事件是隧道路由事件还是冒泡路由事件。事件路由概念没有直接支持的帮助器类,因此无法使用这样的类来独立“遍历”引发实际进行路由的事件的事件路由。存在表示路由的类 EventRoute,但该类的方法通常仅供内部使用。

WPF元素树之资源和树

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

但是,资源查找也可以超出直接逻辑树。对于应用程序标记,资源查找可以向上继续,直到应用程序资源以及主题支持和系统值。如果资源引用是动态的,则主题本身也可以引用主题WPF元素树之外的系统值。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...