一、Window 图形演化
创建用户界面:
- User32: 该部分为许多元素(如窗口、按钮和文本框等)提供了熟悉的 Windows 外观。
- GDI/GDI+: 该部分为渲染简单形状、文本以及图像提供了绘图支持,但增加了复杂程度(而且通常性能较差)。
不同框架工具(如.NET、MFC)只是为与 User32 和 GDI/GDI+ 进行交互提供了不同的封装器而已,底层都是使用 Windows 操作系统的相同部分分来工作的。
DirectX:新的图形引擎
特点: 提供复杂的纹理映射、特殊效果(如半透明)以及三维图形所需的硬件加速功能。
DirectX 曾主要作为游戏开发人员的工具包,现 WPF 应用程序在底层都是使用DirectX。
二、WPF 体系结构
图1-2中包含的一些重要组件:
-
PresentationFramework.dll 包含 WPF 顶层的类型,包括那些表示窗口、面板以及其他类型控件的类型。它还实现了高层编程抽象,如样式。开发人员直接使用的大部分类都来自这个程序集。
-
PresentationCore.dll 包含了基础类型,如 UIElement 类和 Visual 类,所有形状类和控件类都继承自这两个类。如果不需要窗口和控件抽象层的全部特征,可使用这一层,而且仍能利用 WOF 的渲染引擎。
-
WindowBase.dll 包含了更多基本要素,这些要素具有在 WPF 之外重用的潜能,如DispatcherObject 类和 DependencyObject 类,这两个类引入了依赖项属性。
-
milcore.dll 是 WPF 渲染系统的核心,也是媒体集成层(MIL)的基础。其合成引擎将可视化元素转换为 Direct3D 所期望的三角形和纹理。尽管将milcore.dll 视为 WPF 的一部分,但它也是 Windows Vista 和 Windows 7 的核心系统组件之一。实际上,桌面窗口管理器(DWM)使用 milcore.dll 渲染桌面。
-
WindowCodecs.dll 是一套提供图像支持的低级 API(例如处理、显示以及缩放位图和 IPEG 图像)。
-
Direct3D 是一套低级 API, WPF 应用程序中的所有图形都由它进行渲染。
-
User32 用于决定哪些程序实际占有桌面的那一部分。所以它仍被包含在 WPF 中,但不再负责渲染通用控件。
三、类层次结构
1.System.Threading.DispatcherObject 类
单线程亲和模(Single-Thread Affinity,STA)模型,整个用户界面由单个线程拥有。从另一个线程与用户界面元素进行交互是不安全的。为方便使用此模型,每个 WPF 应用程序由协调消息(键盘输入、鼠标移动仍至框架处理,如布局)的调度程序管理。通过继承自 DispatcherObject 类,用户界面中的每个元素都可以检查代码是否在正确的线程上运行,并能通过访问调度程序为用户界面线程封送代码。
2.System.Windows.DependencyObject 类
在 WPF 中,主要通过属性与屏幕上的元素进行交互。在早期设计阶段,WPF 的设计者决定创建一个更加强大的属性模型。该模型支持许多特性,例如更改通知、默认值继承以及减少属性存储空间。最终结果就是依赖项属性特性。
3.System.Windows.Media.Visual 类
在 WPF 窗口中显示的每个元素本质上都是 Visual 对象。可将 Visual 类视为绘图对象,其中封装了绘图指令、如何执行绘图的附加细节(如剪裁、透明度以及变换设置)以及基本功能(如命中测试)。Visual 类还在托管的 WPF 库和渲染桌面的 milcore.dll 程序集之间提供链接。任何继承自 Viusal 的类都能在窗口上显示出来。如果更愿意使用轻量级的 API 创建用户界面,而不想使用 WPF 的高级框架特征。
4.System.Windows.UIElement类
UIElement 类增加了对 WPF 本质特征的支持,如布局、输入、焦点和事件。
5.System.Windows.FrameworkElement 类
FramworkElement 类是 WPF 核心继承树中的最后一站。该类实现了一些全部由 UIElement 类定义的成员。例如,UIElement 类为 WPF 布局系统设置了基础,但 FrameworkElement 类提供了支持它的重要属性(如 HorizontalAlignment 和 Margin 属性)。UIElement 类还添加了对数据绑定、动画以及样式等核心特性的支持。
6.System.Windows.Shapes.Shape 类
基本的形状类(如 Rectangle 类、Polygon 类、Ellipse 类、Line 类以及 Path 类)都继承自该类。可将这些形状类与更传统的 Windows 小组件(如按钮和文本框)结合使用。
7.System.Windows.COntorls.Control 类
控件(control)是可与用户进行交互的元素。控件显然包括 TextBox 类、Botton 类和 ListBox 类等。Control 类为设置字体以及前景色与背景色提供了附加属性。
8.System.Windows.Controls.ContentControl 类
ContenControl 类是所有具有单一内容的控件的基类,包括简单的标签乃至窗口的所有内容。该模型给人印象最深刻的部分是:控件中的单一内容可以是普通字符串乃至具有其他形状和控件组合的布局面板。
9.System.Windows.Controls.ItemsControl 类
ItemsControl 类是所有显示选项集合的控件的基类,如 ListBox 和 TreeView 控件。列表控件十分灵活。例如,使用 ItemsControl 类的内置特征,可将简单的 ListBox 控件变换成单选按钮列表、复选框控件列表、平铺的图像或是您所选择的完全不同的元素的组合。实际上。WPF 中的菜单、工具栏以及状态栏都是特定的列表,并且实现它们的类都继承自 ItemsControl 类。
10.System.Windows.Controls.Panel 类
Panel 类是所有布局容器的基类,布局容器是可包含一个或多个子元素、并按特定规则对子元素进行排列的元素。