回顧過去
早期基於
windows
使用者介面的主要技術是
gdi和
user
子系統,它們早在
1985
年就由windows 1.0
引入了。這些技術現在已經過時了。在
1990
年,sgi
建立了流行的圖形庫
opengl
,它可以用於高階2d和
3d圖形的開發。人們使用它建立
cad和虛擬科學等程式。在
1995
年,微軟的
directx
是乙個新的高效技術,同樣可以用於
2d圖形等的開發。在這些年,許多增強的應用程式是由
gdi和
directx
構建的。
winxp
時代,構建於
gdi之上且新增了更多支援(如
alpha
混合)的
gdi+
被引入。同時,
directx
也在一代代地更新。
2002
年,.net
和託管**被引入,開發者可以使用更加方便的程式設計模型來開發基於
windows
和web
的應用程式。在這個時代,構建於
gdi+
之上的windows form
成為開發者構建基於
windows
使用者介面的主要技術。儘管如此,
window form
仍舊受限於
gdi+
和user
子系統。
在directx9
剛開始的時候,微軟為了適應託管**而對
directx
框架進行的調整,並且最終形成
xna框架。儘管開發者使用
c#開發
directx
應用可以避免許多複雜的
com互操作,但是除了編寫遊戲之外,託管**並沒有什麼顯著的簡化。
基於gdi
技術的使用者體驗被認為「足夠好」,因為提供非
gdi技術的硬體並不普遍。近些年,儘管硬體不斷更新,消費者的期望不斷增長,但是開發人員的經驗並沒有顯著提高。在最近幾年,開發者開始開發個性化的應用程式和控制項(如使用位圖按鈕代替一般按鈕)。這些個性的東西不僅開發花銷大,而且通常還會產生不好的使用者體驗,比如不能執行在某些特定的環境中,或不能在遠端桌面上顯示等。
進入
wpf
微軟認識到很需要某些嶄新的、既能脫離
gdi和
user
子系統限制,又能提供像
windows forms
那樣令人們喜愛且具有高生產率的東西。
wpf應運而生。下面列舉的是
wpf包含的一些特性:
廣泛的整合性
在wpf
之前,想要在應用程式中使用
3dwindows
開發者,需要學習許多單獨的技術,並且還要在沒有任何內建支援的情況下把它們混合在一起。與此不同,
wpf則覆蓋了所有這些領域,並且提供了一致的程式設計模型使得許多**可以組合在一起並且顯示出來。相同型別的特效可以一致地跨域不同**,並且我們學習乙個領域的技術就可以應用在其他所有領域。
解析度無關
wpf增強了向量繪圖,這使得開發者可以在螢幕上以解析度無關的方式收縮或者放大介面元素。
硬體加速
wpf構建於
direct3d
之上,無論是2d、
3d、圖形還是文字,都被轉換到
3d三角形、紋理和其他
3d物件上,繼而由硬體渲染。這意味著,與基於
gdi的系統不同,
wpf應用程式獲得了硬體加速的好處。(硬體加速可以獲得更好的效能是因為渲染工作由
gpu分擔了)。除了高階遊戲程式,
wpf應用程式可以從最新的硬體和驅動中獲得最大的好處(增強
3d能力)。即便是這樣,
wpf並不需要高階的圖形裝置,因為它擁有乙個軟體渲染流水線。它允許使用還沒有被硬體支援的特性,允許將任何螢幕內容高保真列印,並且在遇到硬體資源不足等問題的時候被當作一種反饋機制使用。
說明式程式設計
20多年來,
win16/win32
程式一直使用說明性指令碼來定義對話方塊和選單的布局。在
winform
當中仍舊沒有對說明式使用者介面的內建至支援。但在
wpf中,
xaml
用於定義使用者介面。
wpf和
xaml
的組合就像使用
html
來定義使用者介面,但是
xaml
的表達能力更加豐富,這種表達能力甚至可以被擴充套件到超出使用者介面範圍。
wpf以
xaml
作為一種文件格式、
3d模型的描述方法甚至更多。這將使得圖形設計者可以直接製作應用程式的外觀以及一些從前不得不用**才能實現的行為。
豐富的組合力和個性化
wpfwpf
還可以快速、簡單地為應用程式換膚。
部署簡單
wpf提供了一般
windows
應用程式的部署方式,如使用
windows installer
、clickonce
或者web
瀏覽器寄宿。這些對於
wpf來說並不是新技術,但是構建在
clickonce
之上、用於支援與瀏覽器及其導航系統整合的方式還是既新穎又有趣的。
綜上,wpf的目標是集
directx(3d
和硬體加速)、
windows forms
(開發者產能)、
abobe flash
(強大的動畫支援)和
html
(說明性標記和簡單部署)等系統的優秀特性於一身。
wpf
和
flash
的選擇
相比flash
,wpf
的優勢包括:開發工具、程式設計模型、豐富的特性集、健壯的可重用控制項、廣泛的程式語言支援和在安全性允許的情況下訪問底層平台;劣勢包括:需要
windows
和.net
框架3.0。
wpf
和
.net
框架的關係
wpf和wcf、wf
、wcs
並列位於
.net
框架的最外圈,它們的下面是
.net
框架2.0
版本所包含的內容,這些內容並沒有因為引入
wpf而發生變化。它基於託管**設計,並且增強了說明性描述和過程**的混合。其核心部分有非託管**實現,並提供一些低階非託管
api以供使用。
筆記 簡譯 WPF的新特性 路由事件(1)
路由事件 routed event 就像 wpf在 net 屬性之上新增了許多基礎結構一樣,它也在 net 事件之上新增了許多基礎結構。路由事件是一種與樹上元素協同工作的事件,當它被觸發後,能夠沿著邏輯樹和視覺樹上 下傳遞,觸發每個子元素的對應事件,不需要任何自定義的 事件路由幫助大多數應用程式遮蔽...
譯 ClickOnce部署概述
clickonce是一項部署技術,它能夠讓你建立基於windows作業系統並能自動更新的應用程式,同時在安裝過程中,可以將使用者需要進行的互動降到最低。clickonce部署克服了在部署過程中存在的以下三個主要問題 對使用者計算機的影響。使用microsoft windows installer進行...
譯 ClickOnce部署概述
clickonce是一項部署技術,它能夠讓你建立基於windows作業系統並能自動更新的應用程式,同時在安裝過程中,可以將使用者需要進行的互動降到最低。clickonce部署克服了在部署過程中存在的以下三個主要問題 對使用者計算機的影響。使用microsoft windows installer進行...