有关WPF框架的了解

仅供个人参考,转载自:http://www.cnblogs.com/xugao918/

WPF(Windows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。也可以这么认为WPF是MS利用原有.NET框架的一些特色,加上DirextX的产物,实现了将原有的编程模型统一化。

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

先分析下WPF的运行过程:

首先从第一个方块说起:WPF的进程会加载四个程序集,Kernel,User32,DirectX,milcore.他们对原有的CLR(Common Language Runtime,公共语言运行时,和Java虚拟机一样也是一个运行时环境,它负责资源管理,例如:内存分配和垃圾收集,并保证应用和底层操作系统之间必要的分离)进行了扩展。我们看看他们分别起什么作用。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方法

了解了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的基础类.

posted on 2013-01-05 22:59  翠竹林  阅读(850)  评论(0编辑  收藏  举报

导航