本篇将从如下三点分析学习WPF架构。
1、WPF总体结构
2、WPF类结构
3、WPF核心功能
一、WPF总体结构
1、先看看下面两张图,第一张来自书《Pro WPF in C# 2010.pdf》这本书,第二张来自MSDN。
第一张图把WPF架构分为三层(托管层,非托管层,操作系统组件层)来描述。但是有两个问题:1,为什么不加入CLR层,毕竟托管代码是在CLR上运行的。2,为什么是Direct3D,它只是DirectX的一个子集,DirectX的其它功能没用上吗?MSDN这张图有了CLR层,但是又缺少了WindowsBase.dll,WindowsCodecs.dll这两个组件。
2、自己画架构图。
这样就完整多了。值得注意的地方是,在托管层里面有条分割线,分为核心部分和框架部分。
二、WPF类结构
1、WPF架构定义的类有很多,我们了解主要类,其它类可以用反编译工具去查看,可以看到源码。也来看看两张图吧,第一张来自《深入浅出WPF》国内的一本好书,另一张来自《 Pro WPF in C# 2010.pdf 》这本书。
第一张画的类多一点,亮点是有条分割线,线上面的类属于核心部分,线下面的类属于框架部分。第二张的亮点是给出了哪些是抽象类,哪些是实体类。
2、比较一下很明了了吧,自己的类图就不画了。偷懒:)
三、WPF核心功能
1、Dispatcher子系统,位于WindowsBase.all。负责WPF的线程调度。WPF鼓励单线程关联模式(STA ),当然也可以写多线程程序。
2、Visual子系统。位于PresentationCore.dll。负责界面的渲染呈现。与非托管层通信。其绘制界面的原理跟GDI比也有改进。它使用了缓存方法,充分利用显卡,可以绘制更复杂的图形,性能更好。
3、Property子系统。位于PresentationCore.dll。实现的功能有依赖属性,扩展属性, 带INotifyPropertyChange通知的普通属性。
4、Layout子系统。位于PresentationFramework.dll。Layout系统要计算和定位其控件的位置。是WPF借鉴Web开发的概念,相对Winform来说是创新。
5、Event子系统。位于PresentationFramework.dll。全新改进的事件系统。提供隧道( tunnel )和冒泡( bubble )两种事件。
6、Binding子系统。位于PresentationFramework.dll。实现数据绑定机制。
7、Style and Templates。位于PresentationFramework.dll。样式和模板功能。也是借鉴Web开发模式。
8、图形动画API等。位于PresentationFramework.dll。
对核心功能,在本篇不深入分析。
参考书籍:
《深入浅出WPF》和《 Pro WPF in C# 2010.pdf 》
参考文章:http://msdn.microsoft.com/en-us/library/ms750441.aspx