第1章WPF概述 1
1.1 Windows图形演化 1
1.1.1 DirectX:新的图形引擎 2
1.1.2硬件加速与WPF 2
1.2 WPF:高级API 4
1.2.1 Windows窗体将继续保留 5
1.2.2 DirectX也将继续保留 5
1.2.3 Silverlight 5
1.3分辨率无关性 6
1.3.1 WPF单位 7
1.3.2系统DPI 8
1.3.3位图和矢量图形 10
1.4 WPF体系结构 11
1.5 WPF4 15
1.5.1新特性 15
1.5.2 WPF工具包 16
1.5.3 Visual Studio 2010 16
1.6小结 18
第2章XAML 21
2.1理解XAML 21
2.1.1 WPF之前的图形用户界面 22
2.1.2 XAML变体 23
2.1.3 XAML编译 23
2.2 XAML基础 24
2.2.1 XAML名称空间 25
2.2.2代码隐藏类 26
2.3 XAML中的属性和事件 29
2.3.1简单属性与类型转换器 30
2.3.2复杂属性 31
2.3.3标记扩展 33
2.3.4附加属性 33
2.3.5嵌套元素 35
2.3.6特殊字符与空白 37
2.3.7事件 39
2.3.8完整的Eight Ball示例 40
2.4使用其他名称空间中的类型 41
2.5加载和编译XAML 43
2.5.1只使用代码 43
2.5.2使用代码和未经编译的XAML 45
2.5.3使用代码和编译过的XAML 47
2.5.4只使用XAML 48
2.6 XAML 2009 49
2.6.1自动事件连接 50
2.6.2引用 51
2.6.3内置类型 51
2.6.4高级的对象创建 52
2.7小结 53
第3章 布局 55
3.1理解WPF中的布局 55
3.1.1 WPF布局原则 56
3.1.2布局过程 57
3.1.3布局容器 57
3.2使用StackPanel面板进行简单布局 59
3.2.1布局属性 60
3.2.2对齐方式 61
3.2.3边距 62
3.2.4最小尺寸、最大尺寸以及显式地设置尺寸 63
3.2.5 Border控件 65
3.3 WrapPanel面板和DockPanel面板 66
3.3.1 WrapPanel面板 66
3.3.2 DockPanel面板 67
3.3.3嵌套布局容器 68
3.4 Grid面板 70
3.4.1调整行和列 72
3.4.2布局舍入 74
3.4.3跨越行和列 74
3.4.4分割窗口 75
3.4.5共享尺寸组 79
3.4.6 UniformGrid面板 81
3.5使用Canvas面板进行基于坐标的布局 82
3.5.1 Z顺序 83
3.5.2 1nkCanvas元素 83
3.6布局示例 86
3.6.1列设置 86
3.6.2动态内容 87
3.6.3组合式用户界面 88
3.7小结 90
第4章 依赖项属性 91
4.1理解依赖项属性 91
4.1.1定义依赖项属性 92
4.1.2注册依赖项属性 92
4.1.3添加属性包装器 94
4.1.4 WPF使用依赖项属性的方式 95
4.1.5共享的依赖项属性 96
4.1.6附加的依赖项属性 96
4.2属性验证 98
4.2.1验证回调 98
4.2.2强制回调 99
4.3小结 101
第5章 路由事件 103
5.1理解路由事件 103
5.1.1定义、注册和包装路由事件 104
5.1.2共享路由事件 104
5.1.3引发路由事件 105
5.1.4处理路由事件 105
5.2事件路由 107
5.2.1 RoutedEventArgs类 108
5.2.2冒泡路由事件 109
5.2.3处理挂起的事件 111
5.2.4附加事件 111
5.2.5隧道路由事件 113
5.3 WPF事件 114
5.3.1生命周期事件 115
5.3.2输入事件 116
5.4键盘输入 117
5.4.1处理按键事件 118
5.4.2焦点 120
5.4.3获取键盘状态 121
5.5鼠标输入 122
5.5.1鼠标单击 123
5.5.2捕获鼠标 124
5.5.3鼠标拖放 125
5.6多点触控输入 127
5.6.1多点触控的输入层次 127
5.6.2原始触控 128
5.6.3操作 130
5.6.4惯性 133
5.7小结 134
第6章 控件 135
6.1控件类 136
6.1.1背景画刷和前景画刷 136
6.1.2字体 138
6.1.3鼠标光标 143
6.2内容控件 144
6.2.1 Content属性 145
6.2.2对齐内容 147
6.2.3 WPF内容原则 148
6.2.4标签 148
6.2.5按钮 149
6.2.6工具提示 152
6.3特殊容器控件 158
6.4带标题的内容控件 161
6.4.1 GroupBox 161
6.4.2 Tabltem 162
6.4.3 Expander 163
6.5文本控件 165
6.5.1多行文本 166
6.5.2选择文本 167
6.5.3拼写检查 167
6.5.4 PasswordBox 169
6.6 列表控件 170
6.6.1 ListBox 170
6.6.2 ComboBox 173
6.7基于范围的控件 173
6.7.1 Slider控件 174
6.7.2进度条 175
6.8日期控件 176
6.9小结 178
第7章Application类 179
7.1应用程序的生命周期 179
7.1.1创建Application对象 180
7.1.2派生一个自定义的Application类 181
7.1.3应用程序的关闭方式 182
7.1.4应用程序事件 183
7.2 Application类的任务 185
7.2.1显示初始界面 185
7.2.2处理命令行参数 186
7.2.3访问当前Application对象 187
7.2.4在窗口之间进行交互 188
7.2.5单实例应用程序 190
7.3程序集资源 195
7.3.1添加资源 195
7.3.2检索资源 196
7.3.3 pack URI 198
7.3.4内容文件 199
7.4本地化 200
7.4.1构建能够本地化的用户界面 200
7.4.2使应用程序为本地化做好准备 201
7.4.3翻译过程 202
7.5小结 207
第8章 元素绑定 209
8.1将元素绑定到一起 209
8.1.1绑定表达式 210
8.1.2绑定错误 211
8.1.3绑定模式 211
8.1.4使用代码创建绑定 213
8.1.5多绑定 214
8.1.6绑定更新 217
8.2绑定到非元素对象 218
8.2.1 Source属性 218
8.2.2 RelativeSource属性 219
8.2.3 DataContext属性 220
8.3小结 221
第9章 命令 223
9.1理解命令 223
9.2 WPF命令模型 224
9.2.1 lCommand接口 225
9.2.2 RoutedCommand类 225
9.2.3 RoutedUlCommand类 226
9.2.4命令库 227
9.3执行命令 228
9.3.1命令源 228
9.3.2命令绑定 229
9.3.3使用多命令源 231
9.3.4微调命令文本 232
9.3.5直接调用命令 232
9.3.6禁用命令 233
9.3.7具有内置命令的控件 235
9.4高级命令 237
9.4.1自定义命令 237
9.4.2在不同的位置使用相同的命令 238
9.4.3使用命令参数 240
9.4.4跟踪和翻转命令 241
9.5小结 245
第10章 资源 247
10.1资源基础 247
10.1.1资源集合 247
10.1.2资源的层次 249
10.1.3静态资源和动态资源 250
10.1.4非共享资源 251
10.1.5通过代码访问资源 251
10.1.6应用程序资源 252
10.1.7系统资源 253
10.2资源字典 254
10.2.1创建资源字典 254
10.2.2使用资源字典 254
10.2.3在程序集之间共享资源 255
10.3小结 258
第11章 样式和行为 259
11.1样式基础 259
11.1.1创建样式对象 262
11.1.2设置属性 263
11.1.3关联事件处理程序 264
11.1.4多层样式 266
11.1.5通过类型自动应用样式 267
11.2触发器 268
11.2.1简单触发器 268
11.2.2事件触发器 270
11.3行为 272
11.3.1获取行为支持 272
11.3.2理解行为模型 273
11.3.3创建行为 273
11.3.4使用行为 275
11.3.5 Blend中的设计时行为支持 276
11.4小结 277
第12章 形状、画刷和变换 279
12.1理解形状 279
12.1.1 Shape类 280
12.1.2矩形和椭圆 282
12.1.3改变形状的尺寸和放置形状 283
12.1.4使用Viewbox控件缩放形状 284
12.1.5直线 287
12.1.6折线 288
12.1.7多边形 288
12.1.8直线线帽和直线交点 290
12.1.9点划线 291
12.1.10像素对齐 292
12.2画刷 293
12.2.1 SolidColorBsh画刷 294
12.2.2 LinearGradientBsh画刷 294
12.2.3 RadialGradientBsh画刷 296
12.2.4 ImageBsh画刷 297
12.2.5平铺的ImageBsh画刷 299
12.2.6 VisualBrush画刷 301
12.2.7 BitmapCacheBrush画刷 302
12.3变换 303
12.3.1变换形状 304
12.3.2变换元素 306
12.4透明 307
12.4.1使用元素半透明 307
12.4.2透明掩码 308
12.5小结 310
第13章 几何图形和图画 311
13.1路径和几何图形 311
13.1.1直线、矩形和椭圆图形 312
13.1.2使用GeometGroup组合形状 313
13.1.3使用CombinedGeomet融合几何图形 315
13.1.4使用PathGeomet绘制曲线和直线 317
13.1.5微语言几何图形 321
13.1.6使用几何图形进行剪裁 323
13.2图画 324
13.2.1显示图画 326
13.2.2导出插图 328
13.3小结 329
第14章 效果和可视化对象 331
14.1可视化对象 331
14.1.1绘制可视化对象 332
14.1.2在元素中包装可视化对象 334
14.1.3命中测试 336
14.1.4复杂的命中测试 338
14.2效果 341
14.2.1 BlurEect类 342
14.2.2 DropShadowEect类 343
14.2.3 ShaderEect类 344
14.3 WteableBitmap类 345
14.3.1生成位图 346
14.3.2写入WriteableBitmap对象 347
14.3.3更高效的像素写入 348
14.4小结 350
第15章 动画基础 351
15.1理解WPF动画 351
15.1.1基于时间的动画 352
15.1.2基于属性的动画 353
15.2基本动画 353
15.2.1 Animation类 354
15.2.2使用代码创建动画 356
15.2.3同时发生的动画 360
15.2.4动画生命期 360
15.2.5 Timeline类 361
15.3故事板 364
15.3.1故事板 365
15.3.2事件触发器 365
15.3.3重叠动画 368
15.3.4同步的动画 368
15.3.5控制播放 369
15.3.6监视动画进度 373
15.4动画缓动 375
15.4.1使用缓动函数 375
15.4.2在动画开始时应用缓动与在动画结束时应用缓动 376
15.4.3缓动函数类 377
15.4.4创建自定义缓动函数 379
15.5动画性能 381
15.5.1期望的帧速率 382
15.5.2位图缓存 383
15.6小结 385
第16章 高级动画 387
16.1动画类型回顾 387
16.1.1动态变换 388
16.1.2动态改变画刷 391
16.1.3动态改变像素着色器 394
16.2关键帧动画 395
16.2.1离散的关键帧动画 397
16.2.2缓动关键帧 397
16.2.3样条关键帧动画 398
16.3基于路径的动画 399
16.4基于帧的动画 401
16.5使用代码创建故事板 404
16.5.1主窗口 405
16.5.2 Bomb用户控件 406
16.5.3投炸弹 407
16.5.4拦截炸弹 410
16.5.5统计炸弹和清理工作 412
16.6小结 413
第17章 控件模板 415
17.1理解逻辑树和可视化树 416
17.2理解模板 420
17.2.1修饰类 422
17.2.2剖析控件 423
17.3创建控件模板 426
17.3.1简单按钮 426
17.3.2模板绑定 428
17.3.3改变属性的触发器 429
17.3.4使用动画的触发器 431
17.4组织模板资源 433
17.4.1分解按钮控件模板 433
17.4.2通过样式应用模板 435
17.4.3自动应用模板 437
17.4.4由用户选择的皮肤 438
17.5构建更复杂的模板 440
17.5.1嵌套的模板 440
17.5.2修改滚动条 443
17.5.3控件模板示例 447
17.6可视化状态 448
17.7小结 449
第18章 自定义元素 451
18.1理解WPF中的自定义元素 452
18.2构建基本的用户控件 454
18.2.1定义依赖项属性 455
18.2.2定义路由事件 457
18.2.3添加标记 458
18.2.4使用控件 460
18.2.5命令支持 460
18.2.6深入分析用户控件 463
18.3创建无外观控件 464
18.3.1修改颜色拾取器的代码 464
18.3.2修改颜色拾取器的标记 465
18.3.3精简控件模板 467
18.3.4特定主题样式和默认样式 469
18.4支持可视化状态 471
18.4.1开始编写FlipPanel类 472
18.4.2选择部件和状态 474
18.4.3默认控件模板 475
18.4.4 使用FlipPanel 481
18.4.5使用不同的控件模板 482
18.5自定义面板 483
18.5.1两步布局过程 484
18.5.2 Canvas面板克隆 486
18.5.3更好的换行面板 487
18.6自定义绘图元素 490
18.6.1 OnRender()方法 491
18.6.2评估自定义绘图 492
18.6.3自定义绘图元素 493
18.6.4自定义装饰元素 495
18.7小结 496
第19章 数据绑定 497
19.1使用自定义对象绑定到数据库 497
19.1.1构建数据访问组件 498
19.1.2构建数据对象 500
19.1.3显示绑定对象 501
19.1.4更新数据库 503
19.1.5更改通知 504
19.2绑定到对象集合 505
19.2.1显示和编辑集合项 506
19.2.2插入和移除集合项 509
19.2.3绑定到ADONET对象 510
19.2.4绑定到LINQ表达式 511
19.3提高大列表的性能 513
19.3.1虚拟化 513
19.3.2项目容器再循环 515
19.3.3延迟滚动 515
19.4验证 515
19.4.1在数据对象中进行验证 516
19.4.2自定义验证规则 519
19.4.3响应验证错误 521
19.4.4获取错误列表 522
19.4.5显示不同的错误指示符号 523
19.4.6验证多个值 525
19.5数据提供者 528
19.5.1 ObjectDataProvider 529
19.5.2 XmlDataProvider 531
19.6小结 533
第20章 格式化绑定的数据 535
20.1数据绑定回顾 535
20.2数据转换 536
20.2.1 StringFormat属性 537
20.2.2值转换器简介 539
20.2.3使用值转换器设置字符串的格式 539
20.2.4使用值转换器创建对象 541
20.2.5应用条件格式化 543
20.2.6评估多个属性 545
20.3列表控件 546
20.4列表样式 548
20.4.1 ItemContainerSle 548
20.4.2包含复选框或单选按钮的ListBox控件 549
20.4.3交替条目样式 552
20.4.4样式选择器 553
20.5数据模板 556
20.5.1分离和重用模板 558
20.5.2更高级的模板 559
20.5.3改变模板 561
20.5.4模板选择器 562
20.5.5模板与选择 564
20.5.6改变条目布局 568
20.6 ComboBox控件 570
20.7小结 573
第21章 数据视图 575
21.1 View对象 575
21.1.1检索视图对象 576
21.1.2视图导航 576
21.1.3以声明方式创建视图 579
21.2过滤、排序与分组 580
21.2.1过滤集合 580
21.2.2过滤DataTable对象 583
21.2.3排序 584
21.2.4分组 585
21.3小结 589
第22章 列表、网格和树 591
22.1 ListView控件 591
22.1.1使用GirdView创建列 592
22.1.2创建自定义视图 596
22.2 TreeView 603
22.2.1使用数据绑定的TreeView 604
22.2.2将DataSet对象绑定到TreeView 606
22.2.3即时创建节点 607
22.3 DataGrid 610
22.3.1改变列的尺寸与重新安排列 612
22.3.2定义列 613
22.3.3设置列的格式和样式 617
22.3.4设置行的格式 618
22.3.5行细节 620
22.3.6冻结列 621
22.3.7选择 621
22.3.8排序 622
22.3.9 DateGrid编辑 622
22.4小结 624
第23章 窗口 625
23.1 Window类 625
23.1.1显示窗口 627
23.1.2定位窗口 628
23.1.3保存和还原窗口位置 629
23.2窗口交互 631
23.2.1窗口所有权 632
23.2.2对话框模型 633
23.2.3通用对话框 634
23.3非矩形窗口 635
23.3.1简单形状窗口 635
23.3.2具有形状内容的透明窗口 637
23.3.3移动形状窗口 639
23.3.4改变形状窗口的尺寸 639
23.3.5组合到一起:窗口的自定义控件模板 641
23.4 Aero玻璃效果 644
23.5 Windows7任务栏编程 648
23.5.1使用跳转列表 649
23.5.2改变任务栏图标和预览 653
23.6小结 658
第24章 页面和导航 659
24.1理解基于页面的导航 659
24.2基于页面的界面 660
24.2.1一个具有导航窗口的基于页面的简单应用程序 661
24.2.2 Page类 662
24.2.3超链接 663
24.2.4在一个框架中驻留页面 665
24.2.5在另一个页面中驻留页面 666
24.2.6在Web浏览器中驻留页面 668
24.3页面历史 668
24.3.1深入分析WPF中的URI 668
24.3.2导航历史 669
24.3.3维护自定义的属性 670
24.4导航服务 671
24.4.1通过编程进行导航 672
24.4.2导航事件 673
24.4.3管理日志 673
24.4.4向日志添加自定义项 675
24.4.5页函数 678
24.5 XAML浏览器应用程序 681
24.5.1 XBAP的运行要求 682
24.5.2创建XBAP 682
24.5.3部署XBAP 683
24.5.4更新XBAP 685
24.5.5 XBAP的安全性 685
24.5.6完全信任的XBAP 686
24.5.7组合XBAP/独立应用程序 687
24.5.8为不同的安全级别编写代码 687
24.5.9在网页中嵌入XBAP 692
24.6 WebBrowser控件 692
24.6.1导航到页面 693
24.6.2构建DOM树 694
24.6.3使用NET代码为网页添加脚本 696
24.7小结 698
第25章 菜单、工具栏和功能区 699
25.1菜单 699
25.1.1 Menu类 699
25.1.2菜单项 700
25.1.3 ContextMenu类 702
25.1.4菜单分隔条 702
25.2工具栏和状态栏 703
25.2.1 ToolBar控件 703
25.2.2 StatusBar控件 707
25.3功能区 708
25.3.1添加功能区 708
25.3.2设置功能区样式 709
25.3.3命令 710
25.3.4应用程序菜单 711
25.3.5选项卡、组与按钮 713
25.3.6改变功能区尺寸 716
25.3.7快速访问工具栏 718
25.4小结 719
第26章 声音和视频 721
26.1播放WAV音频 721
26.1.1 SoundPlayer类 722
26.1.2 SoundPlayerAction类 723
26.1.3系统声音 724
26.2 MediaPlayer类 724
26.3 MediaElement类 726
26.3.1使用代码播放音频 726
26.3.2处理错误 727
26.3.3使用触发器播放音频 727
26.3.4播放多个声音 729
26.3.5改变音量、平衡、速度以及位置 730
26.3.6将动画同步到音频 732
26.3.7播放视频 733
26.3.8视频效果 734
26.4语音 737
26.4.1语音合成 737
26.4.2语音识别 739
26.5小结 740
第27章3D绘图 741
27.1 3D绘图基础 741
27.1.1视口 742
27.1.2 3D对象 742
27.1.3摄像机 749
27.2深入研究3D绘图 753
27.2.1着色和法线 754
27.2.2更复杂的形状 757
27.2.3 Model3DGroup集合 758
27.2.4使用材质 759
27.2.5纹理映射 761
27.3交互和动画 764
27.3.1变换 765
27.3.2旋转 766
27.3.3飞过 767
27.3.4跟踪球 768
27.3.5命中测试 770
27.3.6 3D表面上的2D元素 774
27.4小结 776
第28章 文档 779
28.1理解文档 779
28.2流文档 780
28.2.1流内容元素 781
28.2.2设置内容元素的格式 782
28.2.3创建简单的流文档 784
28.2.4块元素 785
28.2.5内联元素 790
28.2.6通过代码与元素进行交互 795
28.2.7文本对齐 798
28.3只读流文档容器 799
28.3.1缩放 800
28.3.2页面和列 801
28.3.3从文件加载文档 803
28.3.4打印 804
28.4编辑流文档 804
28.4.1加载文件 805
28.4.2保存文件 807
28.4.3设置所选文本的格式 808
28.4.4获取单个单词 810
28.5固定文档 811
28.6批注 812
28.6.1批注类 813
28.6.2启用批注服务 813
28.6.3创建批注 814
28.6.4检查批注 817
28.6.5响应批注更改 820
28.6.6在固定文档中保存批注 820
28.6.7自定义便笺外观 821
28.7小结 822
第29章 打印 823
29.1基本打印 823
29.1.1打印元素 824
29.1.2变换打印输出 826
29.1.3打印不显示的元素 828
29.1.4打印文档 829
29.1.5在文档打印输出中控制页面 832
29.2自定义打印 834
29.2.1使用可视化层中的类进行打印 834
29.2.2自定义多页打印 837
29.3打印设置和管理 842
29.3.1保存打印设置 842
29.3.2打印页面范围 843
29.3.3管理打印队列 843
29.4通过XPS进行打印 846
29.4.1为打印预览创建XPS文档 847
29.4.2写入内存中的XPS文档 847
29.4.3通过XPS直接打印到打印机 848
29.4.4异步打印 849
29.5小结 849
第30章与Windows窗体的交互 851
30.1访问互操作性 851
30.2混合窗口和窗体 853
30.2.1为WPF应用程序添加窗体 854
30.2.2为Windows窗体应用程序添加WPF窗口 854
30.2.3显示模态窗口和窗体 854
30.2.4显示非模态窗口和窗体 855
30.2.5 Windows窗体控件的可视化风格 856
30.2.6不需要互操作性的Windows窗体类 856
30.3创建具有混合内容的窗口 860
30.3.1 WPF和Windows窗体“空域” 860
30.3.2在WPF中驻留Windows窗体控件 861
30.3.3 WPF和Windows窗体用户控件 864
30.3.4在Windows窗体中驻留WPF控件 864
30.3.5访问键、助记码和焦点 866
30.3.6属性映射 867
30.4小结 869
第31章 多线程 871
31.1多线程 871
31.1.1 Dispatcher类 872
31.1.2 DispatcherObject类 872
31.1.3 BackgroundWorker类 875
31.2小结 881
第32章 插件模型 883
32.1在MAF和MEF两者间进行选择 883
32.2插件管道 884
32.2.1管道的工作原理 885
32.2.2插件文件夹结构 886
32.2.3为使用插件模型准备解决方案 887
32.3使用插件的应用程序 888
32.3.1协定 889
32.3.2插件视图 889
32.3.3插件 890
32.3.4插件适配器 890
32.3.5宿主视图 891
32.3.6宿主适配器 891
32.3.7宿主 892
32.3.8添加更多插件 895
32.4与宿主进行交互 895
32.5可视化插件 900
32.6小结 902
第33章ClickOnce部署 903
33.1理解应用程序部署 903
33.1.1 ClickOnce安装模型 905
33.1.2 ClickOnce的局限 905
33.2简单的C1ickOnce发布 906
33.2.1设置发布者和产品 907
33.2.2启动发布向导 908
33.2.3部署文件的结构 912
33.2.4安装ClickOnce应用程序 913
33.2.5更新ClickOnce应用程序 914
33.3 C1ickOnce附加选项 914
33.3.1发布版本 914
33.3.2更新 915
33.3.3文件关联 916
33.3.4发布选项 917
33.4小结 918