3.5 漫游类层次
WPF类有深度继承层次,因此要把不同的类和它们之间的关系搞清楚很困难。本书封二有一张类地图,当遇到新类时可以查阅它,理清它们的位置和关系。由于空间有限此图并不完整,但其中涵盖了大多数的类。
有一批类是WPF内部工作机制的基础,在继续下面的讲解之前,我们先对这些类做一个快速的解释,其中有一些已经在之前的讲解中带过了。图3-9显示了这些重要的类以及它们的关系,它是类地图的一部分。
这10个类有以下一些显著的特点:
l Object类——所有.NET类的基类。
l DispatcherObject类——只能在创建它的线程上访问的对象的基类。大多数WPF类派生自DispatcherObject,因此都继承了非线程安全特性。这里名字中的Dispatcher是指WPF中类似Win32的消息循环的东西,将在第7章中讲解。
l DependencyObject类——支持依赖属性的任何一个对象的基类。DependencyObject定义了GetValue和SetValue方法,是依赖属性运作的中心方块。

图3-9 WPF的核心类
l Freezable类——出于性能原因,可以被“冻结”为一个只读状态对象的基类。一旦被冻结,Freezable对象可以在多个线程中安全共享,这与其他DispatcherObject对象是不同的。冻结的对象就不能被解冻,但是可以复制这些冻结对象来创建一个非冻结的副本。
l Visual类——拥有自己的可视呈现的对象的基类。在第11章中,将深入讨论Visual对象。
l UIElement类——支持路由事件、命令绑定、布局和焦点的可视对象的基类。
l ContentElement类——类似于UIElement的基类,但是它是为那些没有呈现行为的内容准备的。ContentElement寄宿于派生自Visual的类中,然后呈现在屏幕上。
l FrameworkElement类——支持样式、数据绑定、资源和一些通用机制的Windows控件的基类,如tooltips(工具提示)和context menus(上下文菜单)。
l FrameworkContentElement类——类似于FrameworkElement的类,用于表示内容。在第14章中分析了WPF中的FrameworkContentElement对象。
l Control类——一些耳熟能详的控件的基类,如Button、ListBox和StatusBar.Control类,在FrameworkElement基类的基础上添加了很多属性,例如Foreground、Background和FontSize。Controls也支持一些模板,可以完全替代它们的可视树,这些将在第10章中讲解。在下一章中将深入讲解WPF的控件。
在本书中,我们用简单的术语元素指派生自UIElement或FrameworkElement的对象,有时也指派生自ContentElement或FrameworkContentElement的对象。UIElement和FrameworkElement之间或ContentElement和FrameworkContentElement之间的区别并不重要,因为WPF不会带有UIElement和ContentElement的任何公开子类。





