【第161期 January 31, 2011】
 

研發新視界

Windows Presentation Foundation初探

作者/藍士閔

[發表日期:2011/1/26]



前言

WPF(Windows Presentation Foundation)是由微軟開發的一套撰寫使用者介面(UI)的開發技術。這項技術能為程式開發者帶來更多的便利,所能夠開發的產品也越來越多樣化。隨著Windows 7作業系統的普及,原有Windows系列將會慢慢被替換掉,而這套系統也將會廣泛的用於Windows 7的應用程式界面開發,而以往用來開發視窗所用用的程式WinForm技術也將會慢慢被WPF取代。

WPF的便利性

有別於以往使用者介面開發,WPF將使用者介面與程式邏輯、功能完整的分離開來,獨立出界面設計和程式設計這兩個部分。以最為廣泛使用的使用者介面開發技術Java Swing來說,當我們要開發使用者介面時,不管是哪一方面的設計者,都需要熟悉兩個層面技術才能進行開發的動作,導致無法有效分工。另外在Java Swing開發過程中,若是使用者介面需要進行修改,只要動到一些小地方,像調整寬度長度等,整個程式都將要重新compiler過才能看到新的結果,造成許多時間的浪費,研發和維護成本也將會提高。上述問題時常困擾著開發者們,但是在WPF中,這些問題將會被大大的改善甚至是看不到。

WPF的界面設計植基於Microsoft所研發的新技術XAML(Extensible Application Markup Language),開發者可以利用類似XmlConfig的方式來設計界面。舉個例子來說,當我們要產生一個Button時,若是我們用Java開發,我們可能需要先建立一個容器物件、然後按鈕物件等等,許許多多的Code才能完成。但是在WPF中,界面開發者只需要作兩個動作即可完成:步驟一、新增.xaml檔,如圖一所示:


《圖一》


此時得到一個空白的界面。接著在下面看起來像是HTML的地方之間寫這麼一段:<button name=”btnQuery” height=23 width=60>,輕輕鬆鬆、簡簡單單就可以產生一個高23、寬60的按鈕出來,如圖二所示。


《圖二》


若是你連打字都懶得打,沒關係,WPF也有著VB一樣的功能。我們可以利用修改旁邊的屬性視窗,也可以達到一樣的效果,如圖三所示。


《圖三》


連鍵盤都不太使用到,就可以完成一個按鈕。如果你想調整版面配置,屬性欄位這邊也有許多的功能讓你自由調整,你想要置中、置右、從右到左排列等等,滑鼠點一下就可以完成;若今天使用開發,你還要熟悉各式各樣的Layout才能夠調整版面。如何?比起使用Java開發的時間,使用WPF所開發的時間可能不到一半吧。當我們要調整這個按鈕的樣式,只需對這段文字檔(.xaml)進行修改,不必經過compiler的過程即可達到修改的效果。這樣的設計不僅大量減少了開發的時間,也大量減少了維護的成本,對於負責界面設計以及程式設計的人員,可以有效的分工,就算不懂程式的人也做的到。

WPF除了介面設計簡單外,它的Binding能力也是賣點之一。假設我們今天有一個按鈕和一個文字方塊,我想把文字方塊的內容顯示在這個按鈕上面。在以往的開發技術上,我們需要寫一個事件處理的函數實做這件事情,但是在WPF中,我們在XAML檔裡就可以輕鬆完成這件事情。我們只須寫入下列這段文字即可達成。


《圖四》


如此一來,我們不必去動到程式碼的部分也可以完成。一個大型應用程式所使用到的事件處理是非常多的,常常占據許多程式碼的版面,讓開發和維護很不方便。WPF提供了這樣的技術,使得程式碼可以精簡許多。當然,WPF所能處理的Binding能力不只這樣,資料庫的binding也能夠在XAML裡面完成。

除了上述的優點以外,WPF還有一個貼心的設計:可以選擇VB或是C#來進行功能面的撰寫。如此一來,已經習慣於某種技術的人,也不用擔心使用不上手的技術來開發了。

就我目前專案的開發經驗而言,有時候電腦要同時進行很多工作時,運作速度就會變得比較緩慢,程式進行編譯的時間也會變長。當客戶需求改變時,界面需要作細微的調整,像是更改高度、寬度的數值,就會一直需要編譯和執行觀看結果進行調整,時間全部浪費掉了,若程式比較大時,所花費的時間又會更多。WPF這樣的設計,讓我節省不少時間在開發和維護上面。從另一個角度思考,程式設計進化到那麼容易,對於我們這些程式設計師有利也有弊。利的是,開發時間縮短了、維護成本降低了;弊的是,會不會哪天連程式設計師都不需要了,說不定隨便一個不懂的什麼叫作物件導向的工讀生都可以寫?

WPF的產品多樣性

以往的Windows系列在某些人眼中尤其是Mac用戶,有著令人詬病的一點:不夠華麗。就是這些原因讓死忠的Mac用戶,打死不用Windows系統,像我身邊朋友就是如此,以前有許多遊戲不支援Mac,還有一些文書處理軟體Mac上面是沒有的,但他們就是打死不換Windows系統。當我們第一次接觸到Windows Vista或是Windows 7的使用介面時,都有一種耳目一新的感覺:哇,這畫面很棒很炫耶,跟以往的Windows系列;相對地,對於使用過Mac的人,則是會有一種熟悉的感覺,慢慢的,這些死忠的Max用戶開始接受Windows 7系統。這是來自於WPF的另一個賣點:圖型系統。WPF擁有強大了向量繪圖(Vector Graphic)技術,讓以往的2D界面能夠有更炫麗更多元化的呈現。好用的當然不只這樣,他基於DirectX的技術,更為界面帶來全新的3D視覺感官。3D的界面?聽起來很神奇吧,但是在WPF中是可以做得到的。有了這些技術,Flash將來應該會慢慢的被取代掉吧,只要會一點程式設計的技術基礎,就可以做出比Flash更棒的產品。

WPF的發展仍然在起步階段,在四年多前剛推出的時候是乏人問津,許多程式開發人員連碰都不願意碰,但是這一兩年來已經逐漸受到世界上程式開發人員的重視。但是人總是有許多固執的個性,尤其是在這些開發者身上最常看到,如何能讓某些技術的死忠開發者改用WPF,這將會是微軟接下來所要面臨的問題。像是如何取代Flash就是一個值得挑戰的課題。Flash在Youtube、各大社交網站等都可以看得到,隨處可見應用到Flash所開發出來的產品,大家有可能放棄Flash不用嗎?另一個例子來說,雖然VB已經發展到現在的規模了,但是還是有許多人還在用VB6在開發呢。筆者以為,當哪天WPF真的取代各種技術的時候,也就是微軟再次打敗各家敵手,鞏固霸主地位的時候。

結語

以目前的情況來說,網路上跟搜尋WPF所能得到的資料跟Java或是VB.Net比較起來可說是少之又少,難度較深的問題答案會比較難找。於是出現了一些使用WPF的程式開發者、想要推廣WPF的熱血設計師們以及廠商,為了增加WPF的功能性、多元性,開始針對WPF設計元件或是擴充功能,像是DataGrid的部分。WPF的DataGrid功能仍然非常的陽春,這是比較讓現在WPF開發者所詬病的,應該說這是從VB時代就存在的問題。我也常常遇到DataGrid功能不足的問題,不像在用Java開發的時候有各式各樣的Grid功能可以使用,而且還可以自由的擴充。但是這並不代表WPF做不到,而且比較少人在進行開發的動作,我相信WPF是有那個能力做出超越各種技術的。我想喜歡看漫畫的人,應該都有看過中華一番這部漫畫。裡面傳說中的廚具有著神奇的魔力,但是也是需要有像主角那樣功力的人才能發揮效果。WPF還有許多的優點和魅力,等著大家去發掘,還沒使用過的人可以試著體驗看看,享受WPF所帶來的有別於一般開發工具的好處。

參考資料

維基百科:http://zh.wikipedia.org/zh/Windows_Presentation_Foundation