WPF 基礎到企業應用系列2——WPF前世今生
1.開篇前言
很多時候了解一項新技術的歷史和趨勢往往比這項技術的本身價值還要重要。WPF作為一項新技術(已經三年多了,或者應該叫老技術了),我們都有必要了解它的來龍去脈,尤其是公司的CTO、技術總監、架構師等決策層,因為他們對技術的選型及應用具有決定權。對于開發者來說,了解自己正在從事的這個技術的前世今生,有助于我們更好的認識技術本身的價值,也可以避免我們少走一些彎路(圣殿騎士 就走過很多彎路,所以對此比較感慨)。從IT技術發展的這些年可以看出,技術對于各大公司只是競爭的一種手段,而對于大多數程序員來說技術就是特飯碗甚至于生命,所以大家站的立場不同,也會形成各自不同的觀點。放眼現在的全球IT巨頭,摩托羅拉和諾基亞等企業的逐漸衰落,蘋果、谷歌和微軟等巨頭公司在硅谷已經上演了三國大戰。國內騰訊、百度、新浪、網易、盛大、搜狐、阿里巴巴等公司在各個領域的混戰已經表明新的市場和新的技術是他們的主要戰場,那么有些老技術必將淡出歷史舞臺,部分新技術也將被推到臺前,作為IT人了解這些可以幫助我們看得更遠,避免一直處在自己的狹小空間當中,等到了某個技術的真正失落,我們才驟然發現失業已經降臨到我們身邊,前途將一片灰暗!
2.本文提綱
· 1.開篇前言
· 2.本文提綱
· 3.WPF介紹
· 4.WPF技術發展歷史
· 5.之前的技術——逐漸淡出歷史舞臺
· 6.WPF——王者的到來
· 7.與現有技術的對比
· 8.本文總結
. 9.系列進度
3.WPF介紹
Windows APIWindows Presentation Foundation (WPF) 是下一代顯示系統,用于生成能帶給用戶震撼視覺體驗的 Windows 客戶端應用程序。使用 WPF,您可以創建廣泛的獨立應用程序以及瀏覽器承載的應用程序。 WPF 的核心是一個與分辨率無關并且基于向量的呈現引擎(這樣就可以保證圖像和影像具有高清晰度),旨在利用現代圖形硬件的優勢。WPF 通過一整套應用程序開發功能擴展了這個核心,這些功能包括可擴展應用程序標記語言 (XAML)、控件、數據綁定、布局、二維和三維圖形、動畫、樣式、模板、文檔、媒體、文本和版式。WPF 包含在如下圖的 Microsoft .NET Framework 3.0中,使您能夠生成融入了 .NET Framework 類庫的其他元素的應用程序(因為WPF包含在.NET Framework 3.0 里面,所以我們這里不列出3.5和4.0的框架)。
4.WPF技術發展歷史
微軟在1983年春季就宣布開始研究開發Windows,到現在已經有27年的歷史,這27年來,微軟官方主力推行的編程語言與API有四個主要階段:
- 1983~1991年:C搭配Windows API。當時的程序員是很少的,并且開發一個項目也比較的不容易。
- 1992~2001年:這段時期C++搭配MFC庫。在歷史上MFC是最多人用的Windows編程方法。但此后MFC技術也逐漸退出了歷史的舞臺。
- 2002~2006年:(C#、VB以及其他語言)+Windows Form框架。這段期間IT技術的焦點是在Web上,所以雖然大家都在用.NET,但真正的主角是ASP.NET,而不是Windows Forms。Windows Forms還沒等熬出頭,WPF就出現了。Windows Forms注定會是歷史中“最少人使用的微軟開發技術”。Windows Forms其實是不錯的技術,在很多方面都做得挺不錯,比如在UI上、圖形編程上、開發效率上、穩定性上都做得很讓人敬佩,但是我們最后看到的結果卻是大家沒有引起足夠的重視,很多人更偏向于用Delphi和MFC,對Windows Forms卻視而不見,所以造成的最后結果就是Windows Forms生不逢時。
- 2007~現在 :2007年1月30日,Windows Vista正式全球同步發布。它之所以能實現那么絢麗的效果,最關鍵的一點就是Windows Presentation Foundation(WPF),WPF所帶來的震撼視覺效果和用戶體驗使Vista的效果如此絢麗,雖然Vista在后來最終成為了一個敗筆,但它為Windows 7打下了堅實的繼承。后臺語言(C#、VB以及其他語言)+XAML構成的WPF。你可能覺得很奇怪,微軟為何釋出兩個作用相似,卻不同且不相容的.NET API。因為時代的改進,用戶對視覺感受需求不斷提高。因為WPF支持硬件加速、精確顏色、浮點坐標、動畫實現、三維、視頻感受等要求提高。而傳統的 Winform 是到不到這些效果的。
5.之前的技術——逐漸淡出歷史舞臺
舊的事物遲早會退出歷史舞臺,新的生命會經過曲折的里程登上王座。從圖像界面的出現那一刻起,用戶界面(UI)就進入了一個特殊的歷史時期。在隨后幾年里,出現了很多具有歷史意義的界面風格。現在,經典的Windows窗口風格已經存在了10多年,即使是深受用戶喜愛的Windows XP風格也已出現五年有余。無疑大家與我一樣,期待著全新視覺界面的出現。另一方面,當今計算機處理芯片飛速發展,特別是顯示芯片,顯示卡幾乎成為了一臺微型的計算機。但是,其強大的處理能力卻沒有得到充分的應用。目前,顯示卡GPU(Graphics Processing Unit)的處理能力大多只應用在游戲和多媒體領域。為了給用戶提供最強的體驗,滿足不斷提高的用戶視覺需求,Windows Vista引入了全新的圖形子系統——WPF。她能充分利用顯示卡的處理能力提供給用戶最絢的視覺效果。
在Windows Vista出現之前,Windows平臺的圖形系統主要有:GDI、GDI+、Direct3D。其中,GDI的應用領域最為廣泛。GDI圖形系統已經形成了很多年并且已經逐漸形成了自己的一套開發體系。它提供2D圖形處理、文本處理,以及有限的圖像處理功能。雖然在一些顯示卡上支持部分的GDI加速,但是其效果與現在的Direct3D相比還是很弱小。GDI+開始出現是在2001年,它引入了2D圖形的反走樣、浮點數坐標、漸變以及單個象素的Alpha支持。它幾乎支持所有的常用圖像格式。但是,GDI+沒有任何加速功能(全部是用軟件實現)。
NT依賴簡圖
為了兼容性,GDI和GDI+在Windows Vista和現在的Windows 7中仍被支持,只是功能稍有改變,但大體上都還是沒有差別。
6.WPF——王者的到來
在Windows Vista和Windows 7中,GDI、GDI+和WPF并行存在。但是,WPF所有的操作都不依賴于GDI和GDI+,而是間接依賴于強大的Direct3D。請參考下面的WPF核心組件圖。
上圖中的標示為暗紅色的是WPF的三大核心組件,其中milcore組件,它的職責是完成與Direct3D的交互。并且出于效率和安全考慮,milcore由非托管代碼實現。WPF 中的所有顯示是通過 DirectX 引擎完成的,可實現高效的硬件和軟件呈現。WPF 還要求對內存和執行進行精確控制。milcore 中的組合引擎受性能影響關系大,需要放棄 CLR 的許多優點來提高性能。
WPF的兩大核心組件PresentationFramework和PresentationCore都位于通用語言運行庫(CLR)之上。那么就可以看出,WPF的大部分代碼都是以托管形式存在的。這兩大組件提供了WPF項目需要的函數庫和功能庫,由于是以托管的形式存在,所以也避免了我們直接操作底層和出現諸如內存泄露的可能性。
關于WPF的是怎樣執行的,我這里也根據自己的一些理解畫出了如下執行序列圖。此圖比較簡單,但很容易說明問題,如果把中間的每一步驟都畫出來,可能會比較大,為了使大家能看明白,所以中間省略了一些操作。
WPF執行序列圖
前面說了WPF的前世今生,那么對于開發人員,我們最關心的WPF所提供的功能。下面的這幅圖展示了WPF基本功能和服務。
WPF基本功能結構
正如上面的這幅圖,可以看出一共分成了五大塊(Core Presentation、User Interface Services、Base Services、Document Servies和XPS Viewer):
- Core Presentation:包含了所有的圖形效果,如圖形、2D圖形、3D圖形、文本、音頻、視頻和顯示效果。同時還包括強大的動畫效果,動畫可以應用前面的所有元素。最下面的那個就是視覺基本元素。
- User Interface Services:包含了Application Services(應用程序服務)、Deployment Services(部署服務)、Controls(控件庫)、Layout(布局)和Data Binding(數據綁定).
- Base Services:提供了XAML支持、Accessibility(提高開發效率)、Input&Events(輸入和事件的支持)、Property
System(屬性系統)。- Document Servies和XPS Viewer則提供了基本的打印和表報服務,可以通過這些組件實現自定義的打印和顯示效果。
基于上面的特性以及我們使用的情況可以總結出:
在輸入方面:WPF支持鍵盤、鼠標、手寫筆、觸摸屏,藍牙錄入、視頻撲捉等,所以基本沒有任何限制,在和外部設備的交互上:有驅動、COM、Win32或通信協議支持的任何設備。打印和報表方面:可訪問打印對話框、打印隊列、打印窗體、控件以及很多可選操作,同時對報表也支持得很好。同時支持流文檔和固定文檔,對命令的支持以及對文件的無限制訪問,最后尤其在動畫、圖形圖像、3D、影像的支持相當好(其他技術是很難做到的),所以WPF除了在性能方面存在著缺陷以外,其他方面可以說是做得非常優秀,同時我們有信心相信微軟會在這方面做得更好!
7.與現有技術的對比
WPF作為一項已經用了將近三年的技術,它到底和現有的一些技術有哪些區別和聯系呢?下面一副圖簡單的介紹了它和現在的一些技術的相似之處。
WPF
現在的技術
XAML
XHTML
Layout
WinForms 2.0 Panels
Data Binding
ASP.NET Syntax
Data Templates
ASP.NET Templates(Atlas)
Styles
CSS
Control Templates
3D
Managed DirectX
Animation
Flash
從上面可以看出,WPF技術和其他的技術有很多相似之處,比如XAML和XHTML、Styles和CSS等尤其相似,所以對我們的開發人員來說學習也不是一件難事。
8.總結
這篇文中介紹了WPF的前世今生,同時介紹了WPF的運行原理和基本應用,在最后也介紹了WPF所包含的主要功能和與現有技術的對比,那么在下一篇我們會講解WPF的實際開發,通過一個案例對比WPF和之前的WinForm之間的差別,從而對WPF有一個正確的認識。
最后圣殿騎士 會盡心盡力寫好這個系列,同時由于是自己對這些技術的使用總結和心得體會,錯誤之處在所難免,懷著技術交流的心態,在博客園和51CTO發表出來,所以希望大家能夠多多指點,這樣在使一部分人受益的同時也能糾正我的錯誤觀點,以便和各位共同提高,后續文章敬請關注!
9.系列進度(紅色標示已發布)
· 5. 使用面板做布局(幾種布局控件的XAML及CS代碼,綜合布局等)
· 6. 依賴屬性、附加屬性(基本、繼承、元數據)
· 7. 路由事件、附加事件
· 8. 命令
· 9. WPF控件分類介紹與使用技巧(ContentControl、HeaderedContentControl…… Decorator)
· 10. 尺寸縮放、定位與變換元素
· 11. 資源
· 12. 數據綁定(基本、值轉換、驗證、集合的篩選、排序、分組、主從、數據提供者)
· 13. 樣式
· 14. 模板
· 15. 多語言、皮膚和主題
· 16. 2D圖形
· 17. 3D圖形
· 18. 動畫(幾種動畫的應用)
· 19. 音頻、視頻、語音
· 20. 文檔、打印、報表
· 21. 用戶控件和自定義控件
· 22. Win32、Windows Form以及ActiveX之間的互用性
· 23. 構建并部署應用程序(ClickOnce部署、微軟setup /InstallShield+自動更新組件)
· 24. WPF的模式講解及實例(MVC Demo)
· 25. WPF的模式講解及實例(MVP Demo)
· 26. WPF的模式講解及實例(MVVM Demo)
· 27. 性能優化(WPF項目的瓶頸)
· 28.一個完整WPF項目(普通架構版)
· 39. 一個完整WPF項目(MVVM架構版)
· 30. WPF 4.0新功能
留言列表