目 录
第一部分 背 景
第1章 为什么创造WPF... 2
1.1 回顾过去..... 2
1.2 步入WPF... 3
1.3 作为.NET Framework的组成部分..... 7
1.3.1 为托管代码而设计..... 8
1.3.2 强调声明式描述..... 8
1.4 小结..... 9
第2章 XAML揭秘...... 10
2.1 XAML定义..... 11
2.2 元素和特性..... 11
2.3 命名空间..... 12
2.4 属性元素..... 14
2.5 类型转换器..... 15
2.6 标记扩展..... 16
2.7 对象元素的子元素..... 18
2.7.1 内容属性..... 18
2.7.2 集合项..... 19
2.7.3 更多类型转换..... 20
2.8 编译:将XAML与过程式代码
混合使用..... 22
2.8.1 在运行时加载和解析XAML... 22
2.8.2 编译XAML... 24
2.8.3 XAML关键字..... 28
2.9 小结..... 29
2.9.1 抱怨1:XML太过冗长不便于
输入..... 30
2.9.2 抱怨2:基于XML的系统性
能差..... 30
第3章 WPF的重要新概念...... 31
3.1 逻辑树与可视树..... 31
3.2 依赖属性..... 35
3.2.1 依赖属性的实现..... 36
3.2.2 变更通知..... 38
3.2.3 属性值继承..... 39
3.2.4 对多个提供程序的支持..... 41
3.2.5 附加属性..... 43
3.3 路由事件..... 46
3.3.1 路由事件的实现..... 46
3.3.2 路由策略和事件处理程序..... 48
3.3.3 路由事件实践..... 48
3.3.4 附加事件..... 51
3.4 命令..... 53
3.4.1 内建命令..... 54
3.4.2 使用输入手势执行命令..... 57
3.4.3 带有内建命令绑定的控件..... 58
3.5 漫游类层次..... 59
3.6 小结..... 60
第二部分 构建WPF应用程序
第4章 WPF控件...... 62
4.1 内容控件..... 63
4.1.1 按钮..... 63
4.1.2 简单容器..... 66
4.1.3 带头(header)的容器..... 70
4.2 Items控件..... 71
4.2.1 选择器..... 73
4.2.2 菜单..... 82
4.2.3 其他Items控件..... 85
4.3 Range控件..... 89
4.3.1 ProgressBar... 89
4.3.2 Slider... 90
4.4 文本和墨水控件..... 90
4.4.1 TextBox... 91
4.4.2 RichTextBox... 91
4.4.3 PasswordBox... 92
4.4.4 InkCanvas... 92
4.5 小结..... 93
第5章 尺寸缩放、定位与变换元素...... 94
5.1 控制尺寸..... 95
5.1.1 高度和宽度..... 95
5.1.2 Margin和Padding... 96
5.1.3 Visibility... 98
5.2 控制定位..... 98
5.2.1 对齐..... 99
5.2.2 内容对齐..... 99
5.2.3 FlowDirection... 100
5.3 应用变换..... 101
5.3.1 RotateTransform... 102
5.3.2 ScaleTransform... 103
5.3.3 SkewTransform... 105
5.3.4 TranslateTransform... 105
5.3.5 MatrixTransform... 106
5.3.6 组合变换..... 106
5.4 小结..... 107
第6章 使用面板做布局...... 108
6.1 Canvas... 109
6.2 StackPanel... 111
6.3 WrapPanel... 112
6.4 DockPanel... 114
6.5 Grid... 116
6.5.1 改变行和列的尺寸..... 119
6.5.2 与GridSplitter交互改变
尺寸..... 120
6.5.3 共享行和列的尺寸..... 122
6.5.4 Grid与其他面板的比较..... 123
6.6 原始面板..... 124
6.6.1 TabPanel... 125
6.6.2 ToolBarOverflowPanel... 125
6.6.3 ToolBarTray... 125
6.6.4 UniformGrid... 125
6.7 处理内容溢出..... 126
6.7.1 剪辑..... 126
6.7.2 滚屏..... 127
6.7.3 缩放..... 129
6.8 把它们拼合:创建一个类似Visual Studio
的可收缩、可停靠、可改变尺寸的窗格..... 132
6.9 小结..... 141
第7章 构建并部署应用程序...... 142
7.1 标准Windows应用程序..... 142
7.1.1 Window类..... 143
7.1.2 Application类..... 145
7.1.3 创建并显示对话框..... 150
7.1.4 维持并恢复应用程序状态..... 152
7.1.5 部署:ClickOnce与Windows
Installer. 153
7.2 基于导航的Windows应用程序..... 154
7.2.1 Page和它们的导航容器..... 154
7.2.2 页间导航..... 156
7.2.3 页间数据传递..... 160
7.3 拥有Windows Vista感官的应用程序..... 162
7.3.1 用TaskDialog替代
MessageBox.. 163
7.3.2 使用Aero Glass.. 165
7.4 Gadget风格的应用程序..... 168
7.5 XAML浏览器应用程序..... 169
7.5.1 功能限制..... 170
7.5.2 集成的导航功能..... 172
7.5.3 部署..... 172
7.6 松散XAML页..... 175
7.7 小结..... 176
第三部分 为专业开发人员设计的功能
第8章 资源...... 178
8.1 二进制资源..... 178
8.1.1 定义二进制资源..... 178
8.1.2 访问二进制资源..... 179
8.1.3 本地化..... 183
8.2 逻辑资源..... 184
8.2.1 资源查找..... 187
8.2.2 静态资源与动态资源..... 187
8.2.3 与系统资源交互..... 192
8.3 小结..... 193
第9章 数据绑定...... 194
9.1 绑定对象..... 194
9.1.1 在程序代码中使用绑定..... 194
9.1.2 在XAML中使用绑定..... 196
9.1.3 与普通.NET属性绑定..... 197
9.1.4 绑定到整个对象..... 199
9.1.5 绑定到集合..... 200
9.1.6 与DataContext共享源..... 203
9.2 控制呈现..... 204
9.2.1 使用数据模板..... 204
9.2.2 使用值转换器..... 206
9.3 定制一个集合的视图..... 210
9.3.1 排序..... 210
9.3.2 分组..... 212
9.3.3 过滤..... 214
9.3.4 导航..... 215
9.3.5 使用其他视图..... 216
9.4 数据提供程序..... 218
9.4.1 XmlDataProvider... 218
9.4.2 ObjectDataProvider... 222
9.5 高级主题..... 224
9.5.1 自定义数据流..... 224
9.5.2 向绑定添加验证规则..... 226
9.5.3 写你自己的验证规则..... 226
9.5.4 使用不相交源..... 228
9.6 把它们拼合:纯XAML RSS阅读器..... 230
9.7 小结..... 232
第10章 样式、模板、皮肤和主题...... 233
10.1 样式..... 234
10.1.1 共享Style.. 235
10.1.2 触发器..... 240
10.2 模板..... 244
10.2.1 控件模板..... 245
10.2.2 与触发器交互..... 246
10.2.3 限制目标类型..... 247
10.2.4 关于已应用模板的父元素的
属性..... 248
10.2.5 关于可视状态..... 254
10.2.6 将模板与样式混合起来..... 258
10.3 皮肤..... 260
10.4 主题..... 266
10.4.1 使用系统颜色、字体和参数..... 266
10.4.2 每个主题的样式和模板..... 267
10.5 小结..... 270
第四部分 通过富媒体使程序领先于时代
第11章 2D图形...... 272
11.1 Drawing.. 273
11.1.1 Geometry.. 275
11.1.2 Pen.. 283
11.1.3 剪贴画示例..... 285
11.2 Visual.. 286
11.2.1 用内容填充DrawingVisual.. 286
11.2.2 在屏幕上显示Visual.. 289
11.2.3 可视命中测试..... 291
11.3 Shape.. 297
11.3.1 Rectangle.. 298
11.3.2 Ellipse.. 299
11.3.3 Line.. 300
11.3.4 Polyline.. 300
11.3.5 Polygon.. 301
11.3.6 Path.. 301
11.3.7 基于Shape的剪贴画..... 302
11.4 Brush.. 303
11.4.1 颜色笔刷..... 303
11.4.2 tile笔刷..... 309
11.4.3 把Brush用作透明掩码..... 315
11.5 位图效果..... 317
11.6 小结..... 320
第12章 3D图形...... 321
12.1 3D图形入门..... 321
12.2 Camera和坐标系统..... 325
12.2.1 Position属性..... 325
12.2.2 LookDirection.. 327
12.2.3 UpDirection.. 329
12.2.4 平行投影与透视投影..... 331
12.3 Transform3D.. 332
12.3.1 TranslateTransform3D.. 334
12.3.2 ScaleTransform3D.. 335
12.3.3 RotateTransform3D.. 337
12.3.4 Transform3D组合..... 339
12.4 Model3D.. 340
12.4.1 光照(Light)..... 341
12.4.2 GeometryModel3D.. 345
12.5 Visual3D.. 357
12.5.1 ModelVisual3D.. 357
12.5.2 3D命中测试..... 358
12.6 Viewport3D元素..... 359
12.7 小结..... 362
第13章 动画...... 363
13.1 程序代码中的动画..... 363
13.1.1 “手工”实现动画..... 363
13.1.2 动画类..... 365
13.1.3 简单的动画调整..... 370
13.2 XAML中的动画..... 373
13.2.1 EventTrigger包含
storyboard.. 374
13.2.2 将Storyboard作为Timeline
使用..... 379
13.3 关键帧动画..... 381
13.3.1 线性关键帧..... 382
13.3.2 样条关键帧..... 384
13.3.3 离散关键帧..... 385
13.4 小结..... 387
第14章 音频、视频、语音和文档...... 388
14.1 音频..... 388
14.1.1 SoundPlayerAction.. 389
14.1.2 MediaPlayer.. 390
14.1.3 MediaElement和
MediaTimeline.. 390
14.2 视频..... 392
14.2.1 控制MediaElement的外观..... 392
14.2.2 控制媒体..... 394
14.3 语音..... 397
14.3.1 语音合成..... 397
14.3.2 语音识别..... 400
14.4 文档..... 403
14.4.1 创建流文档..... 403
14.4.2 显示流文档..... 412
14.4.3 添加注释..... 414
14.5 小结..... 417
第五部分 高级主题
第15章 与Win32、Windows Form
以及ActiveX之间的互用性...... 420
15.1 在WPF应用程序中嵌入Win32控件..... 421
15.1.1 一个Win32 Webcam控件..... 422
15.1.2 在WPF里使用Webcam控件..... 425
15.1.3 支持键盘导航..... 430
15.2 在Win32程序里嵌入WPF控件..... 434
15.2.1 HwndSource.. 434
15.2.2 获得正确的布局..... 437
15.3 在WPF应用程序中嵌入Windows
Forms控件..... 440
15.3.1 用程序代码嵌入一个
PropertyGrid.. 440
15.3.2 用XAML来嵌入一个
PropertyGrid.. 442
15.4 在Windows Forms应用程序里嵌入
WPF控件..... 443
15.5 在WPF应用程序中嵌入ActiveX控件..... 447
15.6 小结..... 450
第16章 用户控件和自定义控件...... 452
16.1 创建用户控件..... 453
16.1.1 创建用户界面..... 453
16.1.2 创建行为..... 455
16.1.3 添加依赖属性..... 458
16.1.4 添加路由事件..... 460
16.2 创建自定义控件..... 461
16.2.1 创建行为..... 462
16.2.2 创建用户界面..... 467
16.2.3 对更复杂控件的思考..... 470
16.3 小结..... 473
第17章 使用自定义面板做布局...... 474
17.1 面板与其子元素的通信..... 474
17.1.1 检测步骤..... 474
17.1.2 排列步骤..... 476
17.2 创建Office 2007风格的
RibbonPanel.. 477
17.2.1 RibbonPanel的行为..... 477
17.2.2 RibbonPanel实现..... 478
17.3 小结..... 481
第六部分 附 录
附录 有用的工具...... 484






