注意:
WPF的核心名称空间从System.Windows开始(如System.Windows、System.Windows. Controls以及System.Windows.Media)。唯一的例外是由System.Windows.Forms开始的名称空间,它是Windows窗体工具包的一部分。
1. System.Threading.DispatcherObject类
WPF应用程序使用非常熟悉的单线程亲和(single-thread affinity,STA)模型,这意味着整个用户界面由一个单独的线程拥有。从另一个线程与用户界面元素进行交互是不安全的。为了能够更加容易地使用此模型,每个WPF应用程序由一个协调消息(从键盘输入、鼠标移动到框架处理,如布局)的调度程序(dispatcher)管理。通过继承自DispatcherObject类,用户界面中的每个元素都可以检查代码是否在正确的线程上运行,并且可以访问调度程序为用户界面线程安排代码。在第13章中将学习有关线程模型的更多内容。
2. System.Windows.DependencyObject类
在WPF中,和屏幕上的元素进行交互的主要方式是通过属性。在早期设计阶段,WPF设计者决定创建一个更加强大的属性模型,该模型支持许多特性,例如,更改通知、默认值继承以及更高效的属性保存。该模型的最终结果就是依赖项属性(dependency property)特性,这一特性将在第6章中分析。通过继承自DependencyObject类,WPF类可以获得对依赖项属性的支持。
3. System.Windows.Media.Visual类
在WPF应用程序中显示的每个元素,在本质上都是一个Visual对象。可以将Visual类看作是一个图形对象,它封装了绘图指令、如何执行绘图的额外细节(如剪裁、透明度以及变换设置),以及基本功能(如命中测试)。Visual类还在托管的WPF库和渲染桌面的milcore.dll程序集之间提供了链接。任何继承自Visual的类的对象都可以在窗口上被显示出来。如果更愿意使用轻量级的API创建用户界面,而不想使用WPF的高级框架特征,就可以使用第14章中所描述的方法,直接对Visual对象进行编程。
4. System.Windows.UIElement类
UIElement类为WPF的本质特征提供支持,如布局、输入、焦点以及事件(WPF团队使用首字母缩写LIFE来表示)。例如,测量和排列这两步在该类中进行处理,这些内容将在第4章中学习。在该类中,原始的鼠标单击和按键操作被转换为更有用的事件,如MouseEnter。和属性一样,WPF实现了一个增强的称为路由事件(routed event)的事件路由系统。在第6章中将学习它的工作原理。最后,UIElement类还为命令提供了支持(参阅第10章)。
5. System.Windows.FrameworkElement类
FrameworkElement类是WPF核心继承树中的最后一站。该类实现了一些由UIElement类定义的成员(在UIElement类中只是定义了这些成员而没有实现)。例如,UIElement类为WPF布局系统设置变换,但是FrameworkElement类提供了支持变换的关键属性(如Horizontal Alignment属性和Margin属性)。UIElement类还为数据绑定、动画以及样式提供支持,这些都是核心特征。
6. System.Windows.Shapes.Shape类
基本的形状类(如Rectangle类、Polygon类、Ellipse类、Line类以及Path类)都继承自该类。这些形状类可以和更传统的Windows装饰控件一起使用,如按钮和文本框。在第13中将学习如何构建形状。
7. System.Windows.Controls.Control类
控件(control)就是可以和用户交互的元素。控件显然包括TextBox控件、Button控件以及ListBox控件。Control类为设置字体和前景色与背景色提供了附加支持。但是令人更感兴趣的细节是模板支持,模板支持使用自定义风格的绘图替换控件的标准外观。将在第15章中学习控件模板。
注意:
在Windows窗体编程中,窗体中的所有可视化内容都被称为控件。在WPF中,不再如此。可视化内容被称为元素(element)。使这一概念更加令人混淆的是,许多元素在System.Windows. Controls名称空间中定义,尽管它们不是继承自System.Windows.Controls.Control类,并且不被认为是控件。Panel类就是其中的一个例子。
8. System.Windows.Controls.ContentControl类
ContentControl类是所有具有单一内容控件的基类。包括从简单的标签到窗口的所有内容。该模型给人留下最深刻的印象是:控件中的单一内容可以是从普通的字符串到具有其他形状和控件组合的布局面板的所有元素(在第5章中将介绍更多详细的内容)。
9. System.Windows.Controls.ItemsControl类
ItemsControl类是所有显示选项集合的控件的基类,如ListBox控件和TreeView控件。列表控件是非常灵活的-- 例如,使用ItemsControl类内置的特征可以将简单的ListBox控件变换成一个单选按钮列表、一个复选框控件列表、一系列带标题的图像或者是您所选择的完全不同的元素的组合。实际上,WPF菜单、工具条以及状态栏都是特定的列表,并且实现它们的类都继承自ItemsContorl类。当在第16章中学习数据绑定时,将开始使用列表控件。在第17章中还将近一步地学习列表控件,并且将在第18章中学习更加专业的列表控件。
10. System.Windows.Controls.Panel类
Panel类是所有布局容器的基类,布局容器是可以包含一个或多个子元素,并根据指定的规则对子元素进行排列的元素。这些容器是WPF布局系统的基础,并且使用它们可能是以最富有吸引力、最灵活的方式安排内容的关键。在第4章将分析WPF布局系统的更多细节。