本篇將從如下三點分析學習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