WPF簡單教程:開篇

WPF(Windows Presentation Foundation)是微軟推出的一項桌面編程技術,主要應用領域是企業編程與RIA(富客戶端)領域,靈活強大,效果卓著,體驗上佳。

WPF是一種編程框架,最出名的一點便是採用了XML作爲界面編程語言來描述界面。這主要受益於網頁HTML領域編程體驗。在網頁前端領域,HTML+CSS+Javascript的無敵組合將flash,slivelight,applet掃入了歷史的塵埃,可見這種編程思想的強大。WPF充分的借鑑了這種思想,基於XML開發出了XAML這種描述性的界面語言。

然而,XAML只是一種規範性標準,它廣泛的應用於各個領域,例如slivelight,XPS,WPF。這裏僅僅介紹WPF的XAML。

參考書籍

《WPF編程寶典——使用C#2012和.NET 4.5(第4版)》 作者:Matthew MacDonald
(Pro WPF in C# 2012: Windows Presentation Foundation in .NET 4.5)

圖形界面類庫的歷史

作爲一個編程愛好者,我本人也是十分關注界面編程技術的發展的,在寫這篇文章之前,也深入瞭解過GUI編程領域的歷史發展。

  • 早期,GUI界面剛剛發展起來,採用的是系統的API接口,一般這種接口是典型的C語言接口,抽象程度低,可定製化程度地,編程複雜,參數衆多,還需要了解複雜的消息循環機制,效率低下。這個階段的類庫具有代表性的有:Win32,GTK++;
    win32
  • 之後,GUI編程領域開始高速發展,C++等抽象編程語言開始引入GUI領域,因爲其強大的抽象能力非常適合界面對象的描述,因此圖形界面領域開始騰飛。這個階段的代表性類庫包括(WTL,MFC,Qt,cocos,Gtkmm,swing,swt,awt);
    Java Swing界面類庫
  • 在之後,隨着個性化,定置化需求的上升,廣大應用程序開發者開始尋求一種靈活方便的類庫,能夠自定義開發圖形界面,因此各種情形類庫開始誕生,例如dui(DirectUI:利用DirectX渲染的一種輕型界面類庫),WPF(同樣基於DirectX技術),以及其他一些不知名的圖形類庫;
    WPF界面類庫
  • 隨着網頁技術的高速發展,編程領域逐漸產生了一種趨勢,那就是利用網頁技術編寫桌面客戶端。此時產生的技術有flex(基於flash),瀏覽器嵌入式界面,electron(基於nodejs與chrome);
    Electron

可用圖形界面庫彙總

有可能本人知識面不廣,因此知道的不是很全面,只是在這裏簡要的將主要界面技術羅列一下。

  1. Win32
  2. GTK++
  3. MFC
  4. WTL
  5. Qt
  6. cocos
  7. Gtkmm
  8. Swing
  9. swt
  10. awt
  11. DirectUI
  12. WPF
  13. electron等一系列網頁技術

爲什麼不選擇win32與Gtk++

開發複雜困難,抽象程度地,資料匱乏,造成開發進度緩慢,出貨慢,成品率堪憂。選擇這種基礎接口純屬自討苦吃。

爲什麼不選擇MFC,WTL,Gtkmm

這三種幾面技術基本上屬於第二代技術,雖然有些經過部分改造,引入了一些現代特徵,例如MFC引入XML描述,但是,還是那個原因:可拓展性差,可定製化程度偏低,編程較爲複雜,基本上屬於一種落後技術,開發一些小工具軟件,放置一些按鈕等小控件,還是可以用的,但是較爲複雜的,高度定置化的軟件,這三種技術就不怎麼可用了。

爲什麼不選擇cocos

cocos是MacOS平臺上的獨有類庫,基本上只導出Objective-C接口。對於這種不能再windows平臺上使用的技術,不能利用C++引用的技術,他的存在簡直沒有價值。

爲什麼不選擇swing,awt,swt

首先來說,awt是一種非常蹩腳的技術,基於原生各個系統原生組件,因此編程上受限很大,在不同平臺上擁有不同的表現,甚至可能編譯不通過。swt同樣如此。另外,swing,swt,awt和上文提到的MFC,Gtkmm都是基於一種很古老的編程理念,導出的編程模型原始簡陋,外觀粗糙,可玩性較低。swing強大一些,但是有限。

爲什麼不選擇Qt技術

首先Qt是一個非常好的技術,這句話是對Qt的肯定,這個類庫從出生到現在仍然在不斷的發展和改進,從1.0版本到現在的5.x版本,仍然在不斷進步。其中引入了許多特性,具有完整的應用程序解決方案,完全使用它的類庫,可以一字不改的在不同平臺上編譯。
但是,我不喜歡這個技術。因爲,它每個版本竟然不都不兼容,Qt 3.X版本的源碼放到Qt 4.X上居然無法編譯,這讓我十分的不理解。學習它就好像上了賊船,你不知道什麼時候就過時了。

爲什麼不選擇網頁技術

因爲我不信任他的性能。編寫一些小工具可能沒什麼,編寫一些大塊大塊的展示性應用可能也很實用,但是,編寫小工具我有MFC,編寫超大型工程我用WPF。網頁技術編寫Photoshop這種專業應用力有未逮。

爲什麼不選擇DirectUI

類庫太低端,需要做的東西還很多。

WPF讓我受益匪淺

不管怎麼說wpf的學習經歷讓我受益匪淺,MVVM和數據綁定和XML纔是界面類庫的未來。未來有可能我會自己編寫一套界面類庫,但不是現在,現在還是讓我們仔細研究一下WPF吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章