深入淺出WPF
簡介
本書特色
前言
章節(jié)列表
精彩閱讀
下載資源
相關(guān)圖書
WPF是微軟新一代開發(fā)技術(shù),涵蓋了桌面應(yīng)用程序開發(fā)、網(wǎng)絡(luò)應(yīng)用程序開發(fā)和移動(dòng)應(yīng)用程序開發(fā),是微軟開發(fā)技術(shù)未來十年的主要方向。
本書的內(nèi)容分為兩大部分。第一部分是學(xué)習(xí)WPF開發(fā)的基礎(chǔ)知識(shí),包括XAML語言的詳細(xì)剖析、WPF控件的使用、用戶界面布局的介紹。第二部分是作為優(yōu)秀WPF程序員所應(yīng)掌握的知識(shí),包括依賴對象和數(shù)據(jù)關(guān)聯(lián)、路由事件與命令、數(shù)據(jù)模板與控件模板、繪圖與動(dòng)畫等。
本書作者具有多年WPF開發(fā)經(jīng)驗(yàn),歷經(jīng)多個(gè)大型項(xiàng)目,現(xiàn)任微軟(美國)下載中心項(xiàng)目組高級(jí)開發(fā)工程師。本書是作者多年來學(xué)習(xí)和使用WPF的經(jīng)驗(yàn)總結(jié)。
本書包含了眾多WPF面試點(diǎn),作者憑借書中的知識(shí)順利通過微軟(美國)的面試。
◆ 深入之美 精辟分析WPF源代碼,洞察功能背后隱藏的深刻設(shè)計(jì)理念
◆ 淺出之美 最淺顯得生活案例,融化最抽象的高級(jí)概念
◆ 分離之美 掌握UI與邏輯如何真正分離,享受變與不變的快感
◆ 自然之美 全新的數(shù)據(jù)驅(qū)動(dòng)UI理念,讓數(shù)據(jù)重歸核心地位
◆ 感觀之美 強(qiáng)大的圖形引擎,實(shí)現(xiàn)絕對震撼的UI視覺
本書的寫作緣起幾年前我學(xué)習(xí)WPF。因?yàn)槲沂菑腤indows Forms開發(fā)轉(zhuǎn)來做WPF開發(fā)的,學(xué)習(xí)過程中遇到很多新概念、新特性,其中包括Data Binding、路由事件、命令、各種模板等。我的工作風(fēng)格是對于每個(gè)新知識(shí),一定先把它理解透徹、搞明白再應(yīng)用于項(xiàng)目中,不然總感覺使用起來不放心,于是就對照已有的英文書籍和MSDN逐一研究這些知識(shí)點(diǎn)。每有所得,都喜歡寫成博客發(fā)表在網(wǎng)上,一來供大家學(xué)習(xí)參考,二來做一個(gè)積累、防止以后遺忘。博客發(fā)表之后收到很多讀者的反饋和鼓勵(lì),大家希望我能把這些文章編撰成冊、形成一本學(xué)習(xí)教材,于是我下決心開始寫這本書。這本書的名字也就隨了系列博客文章的名字——《深入淺出WPF》。
之所以叫“深入淺出”,原因有兩個(gè)。名為“深入”,是想把WPF也詮釋一番,所以書中的每個(gè)例子都有可供剖析的實(shí)例,對于一些重要概念,我通過分析WPF的源代碼給予闡述(.NET Framework的部分源代碼是向開發(fā)人員開放的,其中就包含WPF的源代碼)。名為“淺出”,是因?yàn)閹缀趺總(gè)概念我都會(huì)用生活中淺顯易懂的例子進(jìn)行類比,讓讀者可以輕松理解,降低學(xué)習(xí)抽象知識(shí)的痛苦。
為本書起這個(gè)名字,也是出于我對《深入淺出MFC》這本書的景仰之情。我剛剛開始學(xué)編程的時(shí)候正是MFC流行的年代,《深入淺出MFC》這本書給我的學(xué)習(xí)風(fēng)格打下了深深的烙印。其中對我影響最深刻的,一個(gè)是它對MFC源碼的分析,另一個(gè)是“勿在浮沙筑高臺(tái)”、凡事必究其理的探索精神。在后來的近十年工作中,分析和學(xué)習(xí)微軟開發(fā)框架的源碼成為我工作的方法論。本書中包含了一些對WPF源碼的分析,幫助大家對WPF有個(gè)透徹的理解。我以《深入淺出MFC》一書為準(zhǔn)繩和鞭策自己的力量,希望能為大家奉上一本有用的好書。
寫博客容易,寫書難。寫博客,內(nèi)容上可以不那么連貫、不太嚴(yán)謹(jǐn),寫書就不一樣了,要求每個(gè)知識(shí)點(diǎn)都要仔細(xì)琢磨、謹(jǐn)慎下筆,經(jīng)常是寫了滿滿一篇之后感覺不滿意又刪掉重來,直到我認(rèn)為初級(jí)讀者也能順暢理解為止。多少個(gè)不眠之夜就是在這種字斟句酌中轉(zhuǎn)瞬即逝,一年下來,頭上也冒出了很多白發(fā)。我想,既然寫書,那就要把自己的心血奉獻(xiàn)給讀者,這樣才對得起讀者也對得起自己。
本書并不是一本大而全的WPF寶典,而是WPF在實(shí)際工作中用到最多的部分。所以在“輕松幽默、深入淺出”的風(fēng)格基礎(chǔ)上,本書力求實(shí)用。寫書的過程其實(shí)也是對WPF進(jìn)行深耕的過程,本書寫作過半時(shí),我偶然獲得一個(gè)機(jī)會(huì)可以參加微軟的一個(gè)開發(fā)項(xiàng)目,面試我的是美國微軟的一位高級(jí)項(xiàng)目經(jīng)理(現(xiàn)在是我的老板),面試的內(nèi)容就是WPF開發(fā)。我基本上都是用書中的原話作答,十分順利——我獲得了來美國工作的機(jī)會(huì),目前負(fù)責(zé)微軟下載中心管理工具的開發(fā)。我想,這也算是對本書內(nèi)容的一次檢驗(yàn),衷心希望大家在學(xué)習(xí)完這本書中的內(nèi)容后也能在自己的職業(yè)發(fā)展上獲得進(jìn)步。
畢竟我的水平有限,盡管下力氣去寫但還是感覺很粗淺;有些知識(shí)超出微軟官方文檔的覆蓋,我也融入一點(diǎn)自己的判斷,對WPF源碼的閱讀也是在探索中前行,所以,書中疏漏之處再所難免。希望大家能夠多多給予寬容并提出寶貴的建議。我將在本書的后續(xù)版本中不斷豐富內(nèi)容、修改錯(cuò)誤,讓這本書成為一本“活書”、一直為大家服務(wù)下去。本書的糾錯(cuò)及更正將發(fā)布在http://www.cnblogs.com/prism。我的MSN是wpfgeek@live.com,期待與熱愛WPF技術(shù)的朋友共同學(xué)習(xí)和探討。
WPF之What & Why
致謝
第一部分 深入淺出話XAML
第1章 XAML概覽 2
1.1 XAML是什么 2
1.2 XAML的優(yōu)點(diǎn) 3
第2章 從零起步認(rèn)識(shí)XAML 5
2.1 新建WPF項(xiàng)目 5
2.2 剖析最簡單的XAML代碼 8
第3章 系統(tǒng)學(xué)習(xí)XAML語法 14
3.1 XAML文檔的樹形結(jié)構(gòu) 14
3.2 XAML中為對象屬性賦值的語法 17
3.2.1 使用標(biāo)簽的Attribute為對象屬性賦值 18
3.2.2 使用TypeConverter類將XAML標(biāo)簽的Attribute與對象的Property進(jìn)行映射 19
3.2.3 屬性元素 21
3.2.4 標(biāo)記擴(kuò)展(Markup Extensions) 24
3.3 事件處理器與代碼后置 26
3.4 導(dǎo)入程序集和引用其中的名稱空間 28
3.5 XAML的注釋 30
3.6 小結(jié) 30
第4章 x名稱空間詳解 31
4.1 x名稱空間里都有什么 31
4.2 x名稱空間中的Attribute 32
4.2.1 x:Class 32
4.2.2 x: ClassModifier 33
4.2.3 x: Name 34
4.2.4 x:FieldModifier 36
4.2.5 x:Key 36
4.2.6 x:Shared 38
4.3 x名稱空間中的標(biāo)記擴(kuò)展 38
4.3.1 x:Type 38
4.3.2 x:Null 40
4.3.3 標(biāo)記擴(kuò)展實(shí)例的兩種聲明語法 42
4.3.4 x:Array 42
4.3.5 x:Static 44
4.4 XAML指令元素 45
4.5 小結(jié) 46
第5章 控件與布局 47
5.1 控件到底是什么 47
5.2 WPF的內(nèi)容模型 49
5.3 各類內(nèi)容模型詳解 51
5.3.1 ContentControl族 51
5.3.2 HeaderedContentControl族 52
5.3.3 ItemsControl族 53
5.3.4 HeaderedItemsControl族 57
5.3.5 Decorator族 57
5.3.6 TextBlock和TextBox 58
5.3.7 Shape族元素 58
5.3.8 Panel族元素 58
5.4 UI布局(Layout) 59
5.4.1 布局元素 59
5.4.2 Grid 61
5.4.3 StackPanel 70
5.4.4 Canvas 71
5.4.5 DockPanel 72
5.4.6 WrapPanel 74
5.5 小結(jié) 75
第二部分游歷WPF內(nèi)部世界
第6章 深入淺出話Binding 80
6.1 Data Binding在WPF中的地位 81
6.2 Binding基礎(chǔ) 82
6.3 Binding的源與路徑 87
6.3.1 把控件作為Binding源與Binding標(biāo)記擴(kuò)展 87
6.3.2 控制Binding的方向及數(shù)據(jù)更新 88
6.3.3 Binding的路徑(Path) 89
6.3.4 “沒有Path”的Binding 92
6.3.5 為Binding指定源(Source)的幾種方法 93
6.3.6 沒有Source的Binding——使用DataContext作為Binding的源 94
6.3.7 使用集合對象作為列表控件的ItemsSource 98
6.3.8 使用ADO.NET對象作為Binding的源 102
6.3.9 使用XML數(shù)據(jù)作為Binding的源 105
6.3.10 使用LINQ檢索結(jié)果作為Binding的源 109
6.3.11 使用ObjectDataProvider對象作為Binding的Source 111
6.3.12 使用Binding的RelativeSource 116
6.4 Binding對數(shù)據(jù)的轉(zhuǎn)換與校驗(yàn) 120
6.4.1 Binding的數(shù)據(jù)校驗(yàn) 120
6.4.2 Binding的數(shù)據(jù)轉(zhuǎn)換 123
6.5 MultiBinding(多路Binding) 128
6.6 小結(jié) 131
第7章 深入淺出話屬性 132
7.1 屬性(Property)的來龍去脈 132
7.2 依賴屬性(Dependency Property) 136
7.2.1 依賴屬性對內(nèi)存的使用方式 136
7.2.2 聲明和使用依賴屬性 137
7.2.3 依賴屬性值存取的秘密 143
7.3 附加屬性(Attached Properties) 148
第8章 深入淺出話事件 155
8.1 近觀WPF的樹形結(jié)構(gòu) 155
8.2 事件的來龍去脈 157
8.3 深入淺出路由事件 160
8.3.1 使用WPF內(nèi)置路由事件 160
8.3.2 自定義路由事件 164
8.3.3 RoutedEventArgs的Source與OriginalSource 169
8.3.4 事件也附加——深入淺出附加事件 171
第9章 深入淺出話命令 175
9.1 命令系統(tǒng)的基本元素與關(guān)系 176
9.1.1 命令系統(tǒng)的基本元素 176
9.1.2 基本元素之間的關(guān)系 176
9.1.3 小試命令 177
9.1.4 WPF的命令庫 180
9.1.5 命令參數(shù) 180
9.1.6 命令與Binding的結(jié)合 182
9.2 近觀命令 183
9.2.1 ICommand接口與RoutedCommand 183
9.2.2 自定義Command 186
第10章 深入淺出話資源 192
10.1 WPF對象級(jí)資源的定義與查找 192
10.2 且“靜”且“動(dòng)”用資源 195
10.3 向程序添加二進(jìn)制資源 196
10.4 使用Pack URI路徑訪問二進(jìn)制資源 199
第11章 深入淺出話模板 202
11.1 模板的內(nèi)涵 202
11.2 數(shù)據(jù)的外衣DataTemplate 205
11.3 控件的外衣ControlTemplate 214
11.3.1 庖丁解牛看控件 215
11.3.2 ItemsControl的PanelTemplate 220
11.4 DataTemplate與ControlTemplate的關(guān)系與應(yīng)用 221
11.4.1 DataTemplate與ControlTemplate的關(guān)系 221
11.4.2 DataTemplate與ControlTemplate的應(yīng)用 223
11.4.3 尋找失落的控件 230
11.5 深入淺出話Style 236
11.5.1 Style中的Setter 236
11.5.2 Style中的Trigger 237
第12章 繪圖和動(dòng)畫 244
12.1 WPF繪圖 245
12.2 圖形的效果與濾鏡 263
12.2.1 簡單易用的BitmapEffect 263
12.2.2 豐富多彩的Effect 264
12.3 圖形的變形 267
12.3.1 呈現(xiàn)變形 268
12.3.2 布局變形 270
12.4 動(dòng)畫 272
12.4.1 簡單獨(dú)立動(dòng)畫 272
12.4.2 場景 285