转自 liandao http://www.cnblogs.com/liandao/archive/2008/06/19/1226149.html
3.1 逻辑树和可视树
逻辑树--站在控件的角度分析XAML。每个逻辑树的元素都相当于以前编写WINFORM 程序时的一个控件,比如 Button 元素 相当于一个 Button 实例。
可视树--站在视觉效果的角度分析XAML。对每一个控件的各个视觉组成部分进行分析,比如 Button元素 = ButtonChrome + ContentPresenter + TextBox。 Button 元素的视觉效果是由这3个部分效果合成而成的。
至于两种树的遍历辅助类我们根本就不用太过深究,只要知道它们是 .net 提供给 程序员访问 逻辑元素和可视元素的API 就可以了。
3.2 依赖属性
可以说依赖属性支撑了整个WPF各种各样的效果,因为通过依赖属性可以在元素之间共享属性,以前访问别的元素中的属性需要显式地编写代码,而现在子元素可以自动地集成父元素中定义的依赖属性,这个过程是自然、自动的,儿子像父亲是理所当然的。 依赖属性制定了信息在WPF 各个元素之间流动共享的规则。
3.2.3 属性值继承
面向对象继承之外的另外一种继承方式有点像javascript 的prototype 继承实现方式。但是比prototype 继承有多了些灵活性(复杂性), 它定义了假如有多个提供程序支持时,它们之间的有限级别。
3.2.5 附加属性
附加属性解决了怎样在子元素中去继承父元素中没有的依赖属性的问题。
3.3 路由事件
路由事件之于事件相当于依赖属性之于属性。从此只要知道要处理的事件而不必关心元素结果等细节内容,让程序员的关注点进一步接近业务逻辑的实现。
总结
其实依赖属性和路由事件的实现方式上有点像javascript 的 prototype 方式, 依赖属性和路由事件 首先要定义一个相对于类的 static 成员,这相当于 javascript 中把要被继承的属性或函数放在相对于整个类的 prototype 上。不同之处在于WPF 不用像javascript 那样通过指定prototype 来定义依赖属性和路由事件的继承关系。依赖属性和路由事件的继承关系是由 XML 的层次关系来定义的。