WPF簡介

目錄

什么是WPF叭爱?

WPF的歷史?

為什么要用WPF及WPF作用

WPF與winForm區(qū)別?

什么是WPF蓖捶?

Windows APIWindows Presentation Foundation (WPF):Windows 客戶端應(yīng)用程序除师,微軟推出的基于Windows 的用戶界面框架沛膳。

WPF是應(yīng)用程序一個嶄新的概念:數(shù)據(jù)驅(qū)動程序,以數(shù)據(jù)為中心汛聚,通過Bind將界面永遠(yuǎn)定位為從屬地位锹安。

說白了就是一個把數(shù)據(jù)呈現(xiàn)給用戶的UI界面。

WPF不是一個簡單的UI界面顯示 倚舀,它的功能包括可擴(kuò)展應(yīng)用程序標(biāo)記語言 (XAML)叹哭、控件、數(shù)據(jù)綁定痕貌、布局风罩、二維和三維圖形、動畫舵稠、樣式超升、模板、文檔哺徊、媒體室琢、文本和版式。

WPF是基于DirectX引擎的落追,支持GPU硬件加速盈滴,不支持硬件加速時也可以使用軟件繪制。高級別的線程進(jìn)行繪制轿钠,提高使用者的體驗巢钓。自動識別顯示器分辨率并進(jìn)行縮放,比如Vista谣膳。


WPF技術(shù)發(fā)展歷史

微軟1983春宣布研究Windows竿报,微軟官方主力推行的編程語言與API有四個主要階 段:

1983~1991年:C搭配Windows API。當(dāng)時程序員少继谚,開發(fā)一個項目比較困難烈菌。

1992~2001年:C++搭配MFC庫。MFC是最多人用的Windows編程方法。慢慢的MFC技術(shù)逐漸退出了歷史的舞臺芽世。

2002~2006年:(C#挚赊、VB以及其他語言)+Windows Form框架。這段期間IT技術(shù)的焦點(diǎn)是在Web上济瓢,主角是ASP.NET荠割,而不是Windows Forms。這時WPF就出現(xiàn)旺矾。Windows Forms其實是不錯的技術(shù)蔑鹦,但沒有引起大家重視,更偏向于用Delphi和MFC箕宙,造成Windows Forms生不逢時嚎朽。

2007~現(xiàn)在 :2007年1月30日,Windows Vista正式全球同步發(fā)布柬帕。它之所以能實現(xiàn)那么絢麗的效果哟忍,最關(guān)鍵的一點(diǎn)就是Windows Presentation Foundation(WPF),WPF所帶來的震撼視覺效果和用戶體驗使Vista的效果如此絢麗陷寝,為 Windows 7打下了堅實的繼承锅很。后臺語言(C#、VB以及其他語言)+XAML構(gòu)成的WPF凤跑。WPF支持硬件加速爆安、精確顏色、浮點(diǎn)坐標(biāo)饶火、動畫實現(xiàn)鹏控、三維、視頻感受等要求提高肤寝。而傳統(tǒng) Winform 是到不到這些效果的当辐。

為什么要用WPF及WPF作用

每次的技術(shù)前進(jìn)都會讓我們提高工作的效率,WPF為我們減少了很多的代碼鲤看,而且實現(xiàn)了邏輯與界面很好的分離缘揪。

WPF,你可以創(chuàng)建豐富义桂、美妙的連接應(yīng)用程序找筝,以充分利用 Windows 平臺,其中包括 UI慷吊、媒體袖裕、脫機(jī)通信和文檔支持

WPF核心組件

WPF 中的所有顯示是通過 DirectX 引擎完成的,可實現(xiàn)高效的硬件和軟件呈現(xiàn)溉瓶。

WPF 對內(nèi)存和執(zhí)行進(jìn)行精確控制急鳄。

milcore組件谤民,它的職責(zé)是完成與Direct3D的交互,出于效率和安全考 慮疾宏,milcore由非托管代碼實現(xiàn)张足。

milcore 中的組合引擎受性能影響關(guān)系大,需要放棄 CLR 的許多優(yōu)點(diǎn)來提高性能坎藐。

WPF的兩大核心組件PresentationFramework和PresentationCore都位于通用語言運(yùn)行庫(CLR)之上为牍。WPF的大部分代碼都是以托管形式存在的。這兩大組件提供了WPF項目需要的函數(shù)庫和功能庫岩馍,由于是以托管的形式存在碉咆,所以也避免了我們直接操 作底層和出現(xiàn)諸如內(nèi)存泄露的可能性。

WPF基本功能和服務(wù)

五大塊:

Core Presentation:包含了所有的圖形效果兼雄,如圖形吟逝、2D圖形、3D圖形赦肋、文本、音頻励稳、視頻和顯示效果佃乘。包 括強(qiáng)大的動畫效果,動畫可以應(yīng)用前面的所有元素驹尼。最下面的那個就是視覺基本元素趣避。

User Interface Services:包含了Application Services(應(yīng)用程序服務(wù))、Deployment Services(部署服務(wù))新翎、Controls(控件庫)程帕、Layout(布局)和Data Binding(數(shù)據(jù)綁定).

Base Services:提供了XAML支持、Accessibility(提高開發(fā)效率)地啰、 Input&Events(輸入和事件的支持)愁拭、PropertySystem(屬性系統(tǒng))。

Document Servies :基本的打印亏吝,實現(xiàn)自定義的打印

XPS Viewer:表報服務(wù)岭埠,可以通過這些組件顯示 效果。


基本特性及使用情況


在輸入方面:WPF支持鍵盤蔚鸥、鼠標(biāo)惜论、手寫筆、觸摸屏止喷,藍(lán)牙錄入馆类、視頻撲捉等,所以基本沒有任何限制

外部設(shè)備的交互:有驅(qū)動弹谁、COM乾巧、Win32或 通信協(xié)議支持的任何設(shè)備

打印和報表方面:可訪問打印對話框技羔、打印隊列、打印窗體卧抗、控件以及很多可選操作藤滥,對報表也有很好的支持。

支持流文檔和固定 文檔社裆,對命令的支持以及對文件的無限制訪問拙绊,尤其在動畫、圖形圖像泳秀、3D标沪、影像的支持相當(dāng)好。

WPF除了在性能方面存在 著缺陷以外嗜傅,其他方面可以說是做得非常優(yōu)秀金句。

相似的技術(shù)

WPF:使用XAML定義程序界面(如前所述,可以手工編寫吕嘀,可以采用 Experssion Blend等可視化工具編寫)违寞,再用.NET語言(C#, VB.Net等)編寫相應(yīng)的邏輯代碼。

邏輯代碼既可以直接嵌入XAML文件中偶房,也可保存為獨(dú)立的代碼文件

桌面應(yīng)用程序和Web應(yīng)用程序

一套編碼趁曼,桌面應(yīng)用程序與Web應(yīng)用程序均可運(yùn)用。

WPF不僅使美化棕洋、多樣化了桌面應(yīng)用程序挡闰,也是使Web變得異彩紛呈。WPF使3D進(jìn) 入Web成為可能掰盘。比如摄悯,你可以使用矢量圖形設(shè)計軟件(Illustrator, CorelDraw等, 微軟也有了!叫“Expression Designer”)設(shè)計好圖片愧捕,然后將圖形輸出或?qū)С龀蔀閄AML格式奢驯。然后,你可以在Blend中打開XAML文件晃财,制作成動畫叨橱,最后生成的也是 XAML。通過.Net語言(如C#)進(jìn)行編程断盛,還可以控制這些XAML罗洗。

WPF與WinForm、silverlight區(qū)別

WPF技術(shù)比WinForm技術(shù)更先進(jìn)钢猛,來取代WinForm技術(shù)的伙菜。

silverlight是簡版的WPF,silverlight只可用于給WEB應(yīng)用程序添加動態(tài)內(nèi)容命迈。WPF則可以編寫在跨越WEB和桌面的應(yīng)用程序


Windows Forms在底層使用的是GDI+贩绕。GDI+是GDI的“面向?qū)ο蟀b”火的,C++實現(xiàn)。Windows Forms應(yīng)用程序的GDI+淑倾,在C++實現(xiàn)的非托管代碼之上又包了一層馏鹤,從而讓我們能使用C#這樣的托管編程語言調(diào)用GDI+功能繪圖。

WPF底層使用的是DirectX娇哆,就是通常用來開發(fā)游戲的那個DirectX湃累。

Silverlight在API層可以看成是WPF的子集,除了這點(diǎn)之外碍讨,Silverlight與WPF無任何聯(lián)系治力。Silverlight應(yīng)用程序不依賴于.NET Framework,用戶計算機(jī)勃黍、手機(jī)安裝有Silverlight運(yùn)行環(huán)境(比如瀏覽器添加了Silverlight插件)宵统,即可運(yùn)行Silverlight應(yīng)用程序。Silverlight運(yùn)行時環(huán)境在API層面也可以看成是標(biāo)準(zhǔn).NET Framework的功能子集覆获,但它是重新寫過的马澈,獨(dú)立于標(biāo)準(zhǔn)的.NET Framework。

Windows Forms/WPF/Silverlight這三者是獨(dú)立發(fā)展的三個技術(shù)領(lǐng)域锻梳。微軟出于方便開發(fā)的目的箭券,有意讓Silverlight與WPF在應(yīng)用層面開發(fā)體驗(甚至包括大部分應(yīng)用層代碼)高度一致。


開發(fā)角度


Windows Forms成熟疑枯,擁有大量的第三方控件等資源,如果開發(fā)“標(biāo)準(zhǔn)”與“通用”界面類型的Windows應(yīng)用程序蛔六,使用它可以獲得較高的開發(fā)效率和不錯的運(yùn)行性能荆永。

WPF的開發(fā)非常“個性化”的Windows應(yīng)用程序国章,實現(xiàn)你所能“夢想”到的各種用戶界面具钥,且在動畫等多媒體方面,WPF優(yōu)于Windows Forms液兽。WPF的數(shù)據(jù)綁定機(jī)制也比Windows Forms要強(qiáng)大和靈活骂删。

Windows Forms和WPF主要用于開發(fā)桌面應(yīng)用程序,Silverlight主要戰(zhàn)場是互聯(lián)網(wǎng)四啰,通常用它來開發(fā)RIA的互聯(lián)網(wǎng)應(yīng)用程序宁玫,或者手機(jī)等智能移動設(shè)備上的應(yīng)用程序。

會WPF柑晒,不費(fèi)太多力氣欧瘪,就可以轉(zhuǎn)去開發(fā)Silverlight應(yīng)用程序,兩者相似匙赞,特別是界面層代碼佛掖,由于都使用XAML妖碉,這使我們可以比較容易地為某一應(yīng)用程序同時開發(fā)“桌面版”、“手機(jī)版”和“瀏覽器版”三種版本芥被,而這三種版本其用戶界面都可以擁有一致的外觀和用戶使用體驗欧宜。


比較


WPF對計算機(jī)硬件的要求較高,對于硬件配置較低的計算機(jī)拴魄,其運(yùn)行性能不如Windows Forms版本冗茸,對內(nèi)存也是有要求的。隨著計算機(jī)硬件的性能提高羹铅,差距會越來越小蚀狰。

界面的執(zhí)行效率:WinForm優(yōu)于WPF

開發(fā)效率: WPF優(yōu)于WinForm,WPF實現(xiàn) UI與邏輯分離职员,適合團(tuán)隊開發(fā)麻蹋,而且在維護(hù)成本低。

開發(fā)成本焊切,WPF高于WinForm

美觀度:WPF優(yōu)于WinForm

范圍應(yīng)用:WPF優(yōu)于WinForm


WPF比WinForm的較好的特性


什么是Window Handle扮授?(句柄)

答:Handle是Windows操作系統(tǒng)中的一個概念。在Windows程序中专肪,有各種各樣的資源(窗口刹勃、圖標(biāo)、光標(biāo)等)且資源都有標(biāo)示號嚎尤,創(chuàng)建這些資源時系統(tǒng)會為它們分配內(nèi)存荔仁,返回資源的標(biāo)示號,即句柄芽死。句柄指的是一個核心對象在某一個進(jìn)程中的唯一索引乏梁,而不是指針。句柄是和對象一一對應(yīng)的32位無符號整數(shù)值


一关贵、解決Window Handle問題


?原因:? 在Windows GDI或WinForm開發(fā)中復(fù)雜的GUI應(yīng)用程序遇骑,使用的大量的控件,如Grid等揖曾。每個控件或Grid cell都會是一個小窗口落萎,會使用一個Window handle,盡管控件廠商提供了很多優(yōu)化辦法炭剪,但還是會碰到Out of Memory或"Error Create Window handle"练链,而導(dǎo)致程序退出。

WPF解決方式

WPF改變了控件顯示的模式念祭,控件不再使用窗口兑宇,也就不會占用Window handle。

理論上,如果一個WPF只有一個主窗口的話隶糕,WPF只會使用一個Window handle(如果忽略用于Dispatcher的隱藏窗口的話)瓷产。所以WPF GUI程序不會出現(xiàn)Window handle不夠用的情況。


二枚驻、線程問題


在WinForm程序開發(fā)時濒旦,因worker線程修改控件的屬性而導(dǎo)致程序崩潰,這種非法操作并不是每次都失敗再登。WinForm控件提供了InvokeRequired屬性來判斷當(dāng)前線程是不是控件創(chuàng)建線程尔邓。但是當(dāng)控件樹很深時,屬性會比較慢锉矢。

WPF開始設(shè)計的時候梯嗽,就考慮到了多線程的問題。WPF類基本繼承于DispatcherObject DispatcherObject實際就是對Dispatcher的一個簡單封裝沽损。Dispatcher提供了類似InvokeRequired的方法(CheckAccess)灯节。此方法只比較線程的ID,速度比較快绵估。另外炎疆,Dispatcher提供了優(yōu)先隊列,異步調(diào)用国裳,Timer等功能形入,簡化了開發(fā)多線程GUI程序。


三缝左、控件的Composition


在WinForm如果要實現(xiàn)一個有Checkbox的下拉菜單亿遂,將不得不處理復(fù)雜的Window消息。

通過WPF控件的Content Model和Layout系統(tǒng)渺杉,WPF控件可以包括任何類型的控件崩掘,甚至.Net CLR對象。有了這個基礎(chǔ)少办,開發(fā)新的WPF控件更加簡單了。


四诵原、XAML


通過XAML英妓,可以用文本的方式描述復(fù)雜的Object Graph。通過Command绍赛,Routing Event等機(jī)制蔓纠,界面設(shè)計人員和程序員清楚的進(jìn)行了界限。


五吗蚌、Dependency Property


在WinForm開發(fā)中腿倚,一個控件的值變了,其他控件也會跟著改變蚯妇。解決辦法是通過寫代碼或通過數(shù)據(jù)綁定敷燎,通過寫代碼是界面和代碼沒法分開暂筝,后者還不夠靈活。

WPF在這方面通過XAML可以簡單的把相關(guān)的屬性聯(lián)系起來硬贯,通過Extension可以實現(xiàn)復(fù)雜的綁定關(guān)系焕襟。

總結(jié)

不管是WinForm還是WPF都是可以進(jìn)行很好的桌面程序的開發(fā),各自有自己的特點(diǎn)饭豹。

如果你對UI要求不是很高鸵赖,想追求性能好一點(diǎn)那就用WinForm

如果想做的非常美,那就用WPF拄衰,而且WPF也可進(jìn)行Web開發(fā)它褪。如果有WPF網(wǎng)頁開發(fā)需求,可以嘗試轉(zhuǎn)換平臺到Silverlight

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市翘悉,隨后出現(xiàn)的幾起案子茫打,更是在濱河造成了極大的恐慌,老刑警劉巖镐确,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件包吝,死亡現(xiàn)場離奇詭異,居然都是意外死亡源葫,警方通過查閱死者的電腦和手機(jī)诗越,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來息堂,“玉大人嚷狞,你說我怎么就攤上這事∪傺撸” “怎么了床未?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長振坚。 經(jīng)常有香客問我薇搁,道長,這世上最難降的妖魔是什么渡八? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任啃洋,我火速辦了婚禮,結(jié)果婚禮上屎鳍,老公的妹妹穿的比我還像新娘宏娄。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掐隐,像睡著了一般叁幢。 火紅的嫁衣襯著肌膚如雪卖宠。 梳的紋絲不亂的頭發(fā)上巍杈,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音逗堵,去河邊找鬼秉氧。 笑死,一個胖子當(dāng)著我的面吹牛蜒秤,可吹牛的內(nèi)容都是我干的汁咏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼作媚,長吁一口氣:“原來是場噩夢啊……” “哼攘滩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纸泡,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漂问,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后女揭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚤假,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年吧兔,在試婚紗的時候發(fā)現(xiàn)自己被綠了磷仰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡境蔼,死狀恐怖灶平,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箍土,我是刑警寧澤逢享,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站吴藻,受9級特大地震影響瞒爬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沟堡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一疮鲫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弦叶,春花似錦、人聲如沸妇多。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至立莉,卻和暖如春绢彤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜓耻。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工茫舶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刹淌。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓饶氏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親有勾。 傳聞我的和親對象是個殘疾皇子疹启,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Awesome DotNet,這又是一個 Awesome XXX 系列的資源整理蔼卡,由 quozd 發(fā)起和維護(hù)喊崖。內(nèi)容...
    小明yz閱讀 3,695評論 0 47
  • 一、與WPF結(jié)緣 第一次接觸WPF是在2012年雇逞。學(xué)習(xí)了WinForm編程之后荤懂,了解到WPF這個非常先進(jìn)的UI框架...
    金戈大王閱讀 1,463評論 0 8
  • 加油,減肥的第四天塘砸。打卡节仿。
    伊人依人一人閱讀 189評論 0 0
  • 我曾經(jīng)在廣告店做學(xué)徒的時候粟耻,遇到過很多需要拍證件照的客戶。有學(xué)生眉踱,為畢業(yè)證拍照挤忙;有應(yīng)聘者,為簡歷拍照谈喳;有員工册烈,為辦...
    合小沫閱讀 20,189評論 313 1,249
  • 當(dāng)你追求女生時,你們聊些什么婿禽? - 戀愛 - 知乎 異地戀之間赏僧,話題少,怎么辦扭倾? - 個人情感咨詢 - 知乎 與同...
    靖蘭亭閱讀 458評論 0 49