WPF体系结构
WPF使用多层体系结构。在顶层,应用程序与完全由托管C#代码编写的一组高层服务进行交互。至于将.NET对象转换为Direct3D纹理和三角形的实际工作,是在后台由一个名为milcore.dll的低级非托管组件完成。
WPF体系结构
上图显示了WPF应用程序中各层的工作情况。
PresentationFramework.dll包含WPF顶层的类型,包括那些表示窗口、面板以及其他类型控件的类型。它还实现了高层编程抽象,如样式。开发人员直接使用的大部分类都来自这个程序集。
PresentationCore.dll包含了基础类型,如UIElement类和Visual类,所有形状类和控件类都继承自这两个类
WindowsBase.dll包含了更多基本要素,这些要素具有在WPF之外重用的潜能,如DispatcherObject类和DependencyObject类,这两个类引入了依赖项属性。
milcore.dll是WPF渲染系统的核心,也是媒体集成层(Media Integration Layer)的基础。
WindowsCodecs.dll是一套提供图像支持的低级API。
Direct3D是一套低级API,WPF应用程序中的所有图形都由它进行渲染。
User32用于决定哪些程序实际占有桌面的哪一部分,所有它扔被包含在WPF中,但是不再负责渲染通用控件。
构成WPF基本控件集合的类的层次结构
WPF的主要类
System.Threading.DispatcherObject类
WPF应用程序使用单线程亲和(Single-Thread Afinity,STA)模型,意味者整个用户界面由单个线程拥有。从另一个线程与用户界面元素进行交互是不安全的。为方便使用此模型,每个WPF应用程序由协调消息(键盘输入,鼠标移动乃至框架处理,如布局)的调度程序管理。通过继承自DispatcherObject类,用户界面的每个元素都可以检查代码是否在正确的线程上运行,并能通过访问调度程序为用户界面线程封送代码。
System.WindowsDependencyObject类
在WPF中,主要通过属性与屏幕上的元素进行交互。通过继承自DependencyObject类,WPF类可以获得对依赖项属性的支持。
System.Windows.Media.Visual类
在WPF窗口中显示的每个元素本质上都是Visual对象。可以将Visual类视为绘图对象,其中封装了绘图指令、如何执行绘图的附加细节以及基本功能。Visual类还在托管WPF库和渲染桌面的milcore.dll程序集之间提供了链接。任何继承自Visual的类都能在窗口上显示出来。
System.Windows.UIElement类
UIElement类增加了对WPF本质特征的支持,如布局、输入、焦点和事件。与属性类型,WPF实现了增强的称为路由事件的事件路由系统。
System.Windows.FrameworkElement类
FrameworkElement类实现了一些全部由UIElement类定义的成员。如,UIElement类为WPF布局系统设置了基础,但是FrameworkElement类提供了支持它的重要属性(如HorizontalAlignment和Margin属性)。UIElement类还添加了对数据绑定、动画以及样式等核心特性的支持。
System.Windows.Shapes.Shape类
基本的形状类(如Rectangle类,Polygon类,ellipse类、Line类和Path类)都继承自该类。
System.Windows.Controls.Control类
控件(control)是可以与用户进行交互的元素。控件显然包括TextBox类、Button类和ListBox类等。Control类为设置字体以及前景色与背景色提供了附加属性。通过模板支持,可以使用自定义风格的绘图替换控件的标准外观。
System.Windows.Controls.ContentControl类
ContentControl类是所有具有单一内容的控件的基类,包括简单的标签乃至窗口的所有内容。控件中的单一内容可以是普通字符穿乃至具有其他形状和控件组合的布局面板
System.Windows.Controls.ItemsControl类
ItemsControl类是所有显示选项的控件的基类,如ListBox和TreeView类。
System.Windows.Controls.Panel类
Panel类是所有布局容器的基类,布局容器是可包含一个或多个子元素、并按特定规则对子元素进行排列的元素。这些容器是WPF布局系统的基础,要以最富有吸引力、最灵活的方式安排内容,使用这些容器是关键所在。