.NET框架图解之九:WPF

WPF可以认为是MS利用原有.NET框架的一些特色,加上DirextX的产物。将原有的编程模型统一化.

我们来看看WPF的运行机制.


 附件: 您所在的用户组无法下载或查看附件


那么我们现在来分析一下WPF的运行过程吧。


首先从第一个方块说起:WPF的进程会加载四个程序集,Kernel,User32,DirectX,milcore.他们对原有的CLR进行了扩展。我们看看他们分别起什么作用。Kernel,它负责控制和管理与图形驱动相关的最底层任务等。在Kernel之后也是两个比较底层的模块。其中,User32负责确定显示窗口及其在屏幕中的位置状态等,其并不参与常见控件的呈现。DirectX负责呈现窗口和内容等。milcore是WPF的核心部分,它主要起到中间人的作用,以实现WPF与DirectX的通信(非受管模块)。



第二个方块:由CLR来加载WPF的另三个程序集WindowsBase,PresentationFramework和PresentationCore,它们都是受管模块。我们下边要讲解的WPF主要类型,基本都来自于这三个dll。



WindowsBase是WPF API基础架构的核心类型。

PresentationCore主要包括WPF的一些基本类型,例如UIElement,Visual等。它们是PresentationFramework所包括元素的基类。

PresentationFramework主要定义WPF的窗口、面板、样式等高层WPF类型。



第三个方块:编译好机器码以后,就可以执行指令了,这里会创建Systemdomain,它包含了SharedDomain和默认的应用程序域,也就是当前应用程序自己的域,前面我们说过一个.net进程中可以包含多个默认的应用程序域,而这些应用程序域都会用到mscorlib.dll,如果每个默认的应用程序域中都去加载它,那么无疑会造成内存的浪费,所以就有了SharedDomain,它是用来放所有Domain都要用到的Dll,这样就避免了浪费内存.也优化了加载的速度.



第四个方块:这时候默认的应用程序域,就会去找到WPF项目中的Main方法.



OK明白了WPF的启动过程,我们来看看WPF程序中要用到的主要类的层次关系:


 附件: 您所在的用户组无法下载或查看附件


DispatcherObject: WPF中有许多类继承自DispatcherObject,DispatcherObject提供了处理同步和并发的基本构造。WPF建立在dispatcher提供的消息系统之上。WPF的dispatcher使用User32消息来实现线程间调用。

DependencyObject :构建WPF的一个主要思想是属性优先于方法和事件。WPF提供了丰富的属性系统,其核心是DependencyObject。


Visual:该类的主要作用是为WPF提供2D呈现支持,主要包括输出显示,坐标转换,区域剪切等。


UIElement:该类继承自Visual类,是构建WPF元素和基本呈现特征的基类,其中定义很多与输入和焦点有关的特性,例如键盘事件,鼠标,还包括一些与WPF事件模型有关的API。

FrameworkElement:继承了UIElement类,而且还添加了一些功能,例如,布局定义、逻辑树、对象生命周期事件、支持数据绑定和动态资源引用、支持样式和动画。


WPF中的控件,图形操作,动画多媒体,以及3D效果就是由下面4个类的派生类来完成的:


1、Control是创建自定义应用程序控件的基类。可以重写Control类所提供的属性,方法,事件等,为自定义控件添加自定义逻辑。 构建WPF应用程序页面的window类就派生自它.还有button,TextBox等控件也派生自他。




2、Shape:WPF 中呈现二维矢量图形的基础类。有 Line、Polyline、Polygon、Path、Rectangle 和 Ellipse等子类。可从 Shape 类进行派生以实现自定义矢量图形基元。从 Shape 派生是确保这些自定义基元使用 WPF 布局系统的协议的最简单方法。



3、Freezable:WPF中对动画和多媒体的操作类,基本上都是派生自它,它实现了多种生成深层克隆的方法。



4、Visual3D:提供可视三维对象通用的服务和属性,其中包括命中测试、坐标转换和边界框计算。与Visual类一样,只不过是3D的基础类。


原文出处:http://www.cnblogs.com/xugao918/archive/2008/08/01/1258193.html

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [WPF] 的这些文章也感兴趣:

WPF中Closing窗体时调用Hide()方法异常  GDI 与WPF中的颜色简析
WPF 实现样式的继承  WPF实现不规则动画按钮
在MFC中使用WPF技术  WPF实现自定义CheckListBox
WPF基础篇  在后台代码中引入XAML的方法
WPF实现的又一个阅读器——MSDN Reader  PRISM:一个WPF的合成UI框架
[Prism]Composite Application Guidance for WPF(1)--概览  WPF实现数字墨水手绘涂鸦
WPF制作的简易邮箱程序:一起来乐邮邮(MailMail)  在WPF中减少逻辑与UI元素的耦合
WPF实现的又一个阅读器——MSDN Reader  [Prism]Composite Application Guidance for WPF(2)
[Prism]Composite Application Guidance for WPF(6)——服务  WPF实现自定义列表项样式
隔离WPF Add-Ins  WPF 实现主题(Theme)自由切换