出版说明 1
前言 1
第1章 初识WPF 1
1.1 GDI与WPF 1
1.2 WPF架构 5
1.3 WPF的特点 7
第2章 界面声明脚本—XAML 9
2.1 环境设置 9
2.2 通过Visual Studio创建工程 10
2.3 XML简介 11
2.4 XAML简介 12
2.4.1 XAML是WPF中的声明式语言 13
2.4.2 XAML对名字空间的使用 15
2.4.3 XAML中的各个关键字 20
2.4.4 XAML对属性的设置 26
2.4.5 关联属性和附加属性简介 28
2.4.6 XAML扩展标记 29
第3章 软件界面的基本组成—控件 31
3.1 控件类的派生结构 35
3.1.1 基类—Object类 35
3.1.2 界面元素的单线程约束—DispatcherObject类 35
3.1.3 参与属性系统—DependencyObject类 36
3.1.4 界面外观组成—Visual类 38
3.1.5 界面元素的基本实现—UIElement类 39
3.1.6 界面元素的具体实现—FrameworkElement类 45
3.1.7 控件类基类—Control类 51
3.2 WPF的内建控件 53
3.2.1 控件组合基础—单条目控件 53
3.2.2 项目集合的显示—多条目控件 71
3.2.3 小空间显示大元素—范围控件 85
3.2.4 遗漏了什么重要控件吗—其他控件 87
第4章 控制控件的位置—布局与变换 97
4.1 位置控制属性 97
4.1.1 控件该有多大—尺寸控制属性 97
4.1.2 应该占据什么位置呢—对齐控制属性 104
4.1.3 让界面元素变形—使用变换 108
4.1.4 设置冲突怎么办—布局属性优先级 114
4.2 使用面板控制布局 115
4.2.1 经典布局方式—Canvas 116
4.2.2 单向排列面板—StackPanel 117
4.2.3 逐行显示面板—WrapPanel 118
4.2.4 类网页布局面板—DockPanel 120
4.2.5 这种面板就是添格子—Grid 121
4.2.6 选择最合适的布局—五种面板的比较 126
4.2.7 还有别的么—其他布局方式 127
4.2.8 它们也能控制布局—具有布局功能的类 129
4.2.9 不能完全显示怎么办—溢出处理 132
第5章 用规律替代个体—使用资源 137
5.1 二进制资源 137
5.1.1 二进制资源的添加 138
5.1.2 二进制资源的访问 139
5.1.3 全球化和本地化操作 143
5.2 逻辑资源 149
5.2.1 在WPF工程里添加资源 149
5.2.2 访问资源 152
5.2.3 使用动态资源 155
第6章 数据与界面的联动—数据绑定 158
6.1 数据绑定简介 158
6.1.1 数据绑定的代表—Binding类 158
6.1.2 在后台操作绑定—BindingOperation类 159
6.2 在XAML中使用数据绑定 160
6.2.1 最简单的情况—绑定关联属性 160
6.2.2 让绑定的使用更普遍—绑定普通属性 163
6.2.3 并不常见的情况—绑定整个元素 165
6.2.4 处理大量数据—绑定数据集合 165
6.2.5 更灵活的数据记录方法—Data Providers 168
6.3 高级话题 174
6.3.1 到底是谁更新谁—绑定方式 174
6.3.2 数据更新的时机—数据更新规则 175
6.3.3 绑定中的复杂逻辑—绑定多个数据源 177
第7章 外观控制—模板、样式、皮肤、主题 180
7.1 基础知识 180
7.1.1 界面声明中的名字空间—元素名称作用范围 180
7.1.2 简单逻辑的表示—触发器 181
7.2 模板 187
7.2.1 模板的抽象—FrameworkTemplate类 188
7.2.2 数据外观定义—数据模板 188
7.2.3 控件外观定义—控件模板 191
7.2.4 多条目控件的特殊模板—ItemsPanelTemplate 194
7.3 样式 194
7.3.1 从继承结构的分析开始—样式的简单使用 196
7.3.2 样式也可以派生—Style类的继承与覆盖 198
7.3.3 样式的自动使用—设置和获得控件的默认样式 198
7.3.4 样式、模板和触发器之间的联系 200
7.4 皮肤 202
7.5 主题 206
第8章 定制外观—2D图像支持 209
8.1 WPF中的图像容器—Image类 209
8.2 轻量级图像元素—Drawing类 210
8.2.1 图形类基类—GeometryDrawing 214
8.2.2 简单的Geometry类派生类 215
8.2.3 非常用图形的表示—PathGeometry类 215
8.2.4 多个图形的合并—GeometryGroup 218
8.2.5 图形的计算—CombinedGeometry 220
8.2.6 简化图形表示—StreamGeometry 221
8.3 操作底层实现进行绘制—Visual类 222
8.4 高级图像类—Shape 226
8.4.1 线的表示—Line 227
8.4.2 折线的表示—Polyline 228
8.4.3 多边形的表示—Polygon 229
8.4.4 矩形的表示—Rectangle 229
8.4.5 椭圆形的表示—Ellipse 230
8.4.6 通用图形表示类—Path 230
8.5 2D图形相关知识 230
8.5.1 颜色的表示—Color 230
8.5.2 透明度控制 231
8.5.3 点击测试 232
8.5.4 画刷的表示—Brush 235
8.5.5 画笔的表示—Pen 243
8.5.6 2D特效—BitmapEffect 245
第9章 创建真实的世界—WPF的3D支持 249
9.1 3D基础知识 249
9.1.1 位置的表示—坐标系 249
9.1.2 相对位置的表示—模型坐标 251
9.1.3 观察者的表示—相机 252
9.1.4 只显示能看到的—裁剪 253
9.2 使用WPF创建最简单的3D程序 253
9.2.1 3D程序示例 253
9.2.2 程序中的观察者—相机类 256
9.2.3 确定显示效果—材质类 258
9.2.4 虚拟世界中的光—光源类 259
9.3 3D变换 261
9.3.1 位移变换—TranslateTransform3D 261
9.3.2 缩放变换—ScaleTransform3D 261
9.3.3 旋转变换—RotateTransform3D 262
9.3.4 组合变换—Transform3DGroup 262
9.4 3D物体表示 262
9.5 3D物体的绘制 265
第10章 软件界面中的多媒体—动画和音乐 268
10.1 WPF中的动画 268
10.1.1 基础知识 269
10.1.2 在XAML中使用动画类 277
10.1.3 动画类的使用及示例 288
10.2 WPF中的音频和视频 292
10.2.1 SoundPlayer类 293
10.2.2 MediaPlayer类 293
第11章 文字信息的展示—WPF的文本功能 297
11.1 流文本显示类—FlowDocument 297
11.1.1 FlowDocument类的继承结构 298
11.1.2 流文本可以使用的各个元素 302
11.1.3 流文本的显示 313
11.2 WPF打印功能简介 317
11.2.1 打印系统简介 318
11.2.2 使用WPF打印功能 319
11.2.3 打印机管理 321
第12章 完善WPF项目—应用相关 323
12.1 WPF项目的组成 323
12.1.1 WPF项目的创建 323
12.1.2 WPF工程的种类以及项目文件组成 325
12.1.3 Application类 329
12.1.4 Environment类 333
12.1.5 WindowsFormsApplicationBase类 334
12.1.6 ApplicationSettingsBase类 336
12.1.7 Window类 338
12.1.8 NavigationWindow类及其相关类 347
12.2 WPF中的对话框 354
12.2.1 通用对话框 354
12.2.2 消息框 355
12.2.3 TaskDialog 356
第13章 思考—深入了解WPF 364
13.1 WPF的架构 364
13.1.1 界面元素系统 365
13.1.2 视觉系统 368
13.1.3 文字系统 369
13.1.4 输入系统 369
13.1.5 属性系统 370
13.1.6 消息交换层 371
13.1.7 功能实现部分 371
13.2 WPF思想 371
13.2.1 XAML 371
13.2.2 变换 373
13.2.3 布局 374
13.2.4 数据绑定 375
13.2.5 模板及样式 376
13.2.6 WPF中的图像 377
13.2.7 动画 378
13.3 WPF中的性能问题 378
13.3.1 从软件整体考虑性能 378
13.3.2 使用硬件加速 379
13.3.3 合理使用图形图像 380
13.3.4 动画中的性能考虑 384
13.3.5 使用最合适的布局 384
13.3.6 绑定中的性能问题 385
13.3.7 合理使用资源 386
13.3.8 类实现相关 386
第14章 属性驱动的基础—属性系统 388
14.1 关联属性实现 388
14.1.1 CLR属性接口 388
14.1.2 关联属性 389
14.1.3 关联属性的实现 390
14.2 元数据 392
14.2.1 元数据简介 393
14.2.2 默认值与属性继承 395
14.2.3 属性更改及刷新的回调函数 396
14.2.4 FrameworkPropertyMetadata 397
14.2.5 对元数据进行更改 397
14.3 附加属性 402
14.4 只读属性 407
14.5 集合类型的关联属性实现 408
14.6 属性优先级 410
第15章 WPF中的交互手段—了解WPF事件内部机制 411
15.1 WPF中的线程模型 411
15.1.1 消息循环和DispatcherObject 412
15.1.2 Dispatcher 413
15.2 WPF中的事件 417
15.2.1 路由事件 417
15.2.2 附加事件 420
15.2.3 自定义事件的实现 421
15.2.4 RoutedEventArgs 424
15.3 WPF对命令的支持 426
15.3.1 WPF中的内建命令 427
15.3.2 ICommand接口及其实现类 428
15.3.3 ICommandSource接口 434
15.4 与Win32机制交互 434
15.4.1 WPF与Win32程序的交互方法 435
15.4.2 在WPF中使用其他类库控件 437
15.4.3 在Win32中使用WPF控件 441
15.4.4 完成交互功能的类与接口 443
第16章 扩展WPF功能—自定义WPF类 446
16.1 功能类派生 446
16.1.1 更改通知的实现—INotifyPropertyChanged接口 446
16.1.2 自定义转换器—IValueConverter接口及TypeConverter类 448
16.1.3 数据模板选择逻辑—DataTemplateSelector类 452
16.1.4 可复用界面元素基类—Freezable类 453
16.1.5 对界面元素进行修饰—从Adorner类派生 453
16.2 自定义界面元素 454
16.2.1 自定义控件 454
16.2.2 自定义面板 462
16.2.3 自定义动画类 464