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個類的派生類來完成的:
1Control是創建自定義應用程序控件的基類。可以重寫Control類所提供的屬性,方法,事件等,為自定義控件添加自定義邏輯。 構建WPF應用程序頁面的window類就派生自它.還有button,TextBox等控件也派生自他。
2Shape:WPF 中呈現二維矢量圖形的基礎類。有 Line、Polyline、Polygon、Path、Rectangle 和 Ellipse等子類。可從 Shape 類進行派生以實現自定義矢量圖形基元。從 Shape 派生是確保這些自定義基元使用 WPF 布局系統的協議的最簡單方法。
3Freezable:WPF中對動畫和多媒體的操作類,基本上都是派生自它,它實現了多種生成深層克隆的方法。
4Visual3D:提供可視三維對象通用的服務和屬性,其中包括命中測試、坐標轉換和邊界框計算。與Visual類一樣,只不過是3D的基礎類.
作者:徐磊
出處:http://www.cnblogs.com/xugao918/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。