WPF编程宝典——使用C# 2012和.NET 4.5(第4版)(.NET开发经典名著)国内首本基于C# 2012和.NET 4.5 WPF权威著作,前几版深受读者好评
定 价:128 元
丛书名:NET开发经典名著
- 作者:(美)麦克唐纳 著,王德才 译
- 出版时间:2013/8/1
- ISBN:9787302327738
- 出 版 社:清华大学出版社
- 中图法分类:TP312
- 页码:932
- 纸张:胶版纸
- 版次:4
- 开本:大16开
书全面讲解WPF的实际工作原理,是一本WPF权威著作。在紧贴实用示例这一思想的引导下,列出实用提示,引导以专业的方式使用WPF。本书开篇介绍WPF基本概念以便为您奠定坚实的基础,并将现有C#技能作为引用框架,然后讨论高级概念,结合实际演示它们的用法,并重点强调了可由此节省的时间和人力成本。
本书特色
u 理解WPF编程的基础知识:从XAML到控件,乃至数据流
u 开发实用的应用程序,带您实际了解导航、本地化和开发
u 探讨WPF提供的高级用户界面控件
u 分析如何在WPF中管理文档,涵盖了文本布局、打印和文档打包等所有技术
u 使用图形和多媒体来增强应用程序
l WPF权威著作,内容更新至C#2012和.NET4.5,前几版深受读者好评l 零起点阐释WPF核心概念和工作机制,帮助读者从入门到精通l 精彩的示例和详细的讲解,本书后而不重,读起来易学易懂
.NET问世之初便引入了一些重要的新技术,包括编写Web应用程序的全新方法(ASP.NET)、连接数据库的全新方法(ADO.NET)、新的类型安全的语言(C#和VB.NET)以及托管的运行时(CLR)。在这些新技术中,其中一项重要技术是Windows窗体,它是用于构建Windows应用程序的类库。
尽管Windows窗体是一个功能完备的工具包,但它绑定到旧式的核心Windows技术。最重要的是,Windows窗体依靠Windows API创建标准用户界面元素的可视化外观,如按钮、文本框和复选框等。所以这些要素在本质上是不可定制的。例如,如果希望创建时髦的光晕按钮,就需要创建自定义控件,并使用低级的绘图模型为按钮(各种不同的状态)绘制各个方面的细节。更糟的是,普通窗口被切割成不同的区域,每个控件完全拥有自己的区域。所以没有较好的绘制方法可将一个控件的内容(如按钮背后的辉光效果)延伸到其他控件所占的区域中。更不要指望实现动画效果,如旋转文本、闪烁按钮、收缩窗口以及实时预览等,因为对于这些效果必须手工绘制每个细节。
WPF(Windows Presentation Foundation)通过引入一个使用完全不同技术的新模型改变了所有这一切。尽管WPF也提供了大家熟悉的标准控件,但它“自行”绘制每个文本、边框和背景填充。所以WPF的功能更强大,可以改变渲染屏幕上所有内容的方式。使用这些特性,可重新设置常见控件的样式(如按钮),并且通常不需要编写任何代码。同样,可使用变换对象旋转、拉伸、缩放以及扭曲用户界面中的所有内容,甚至可使用WPF动画系统对用户界面中的内容进行变换。并且因为WPF引擎将在窗口上渲染的内容作为单独操作的一部分,所以能处理任意多层相互重叠的控件,即使这些控件具有不规则的形状且是半透明的也同样如此。
在WPF这些新特性的背后是基于DirectX的功能强大的基础结构,DirectX是一套硬件加速的图形API,通常用于开发最前沿的计算机游戏。这意味着可使用丰富的图形效果,而不会损失性能,而使用Windows窗体实现此类效果会严重影响程序运行的性能。实际上,甚至可使用更高级特性,例如对视频文件和3D内容的支持。使用这些特性以及优秀的设计工具,可创建出令人赏心悦目的用户界面和可视化效果,而使用Windows窗体技术是无法实现这些效果的。
还有必要指出,可使用WPF的标准控件和简单的可视化外观来构建普通Windows应用程序。实际上,在WPF中,可以像在旧式Windows窗体模型中那样方便地使用通用控件。更值得一提的是,WPF增强了商业开发人员所需要的特性,包括大幅改进的数据绑定模型、一套用于打印以及管理打印队列的新类,以及用于显示大量格式化文本的文档特性。甚至提供了用于构建基于页面的应用程序的模型,这种应用程序可在Internet Explorer中流畅运行,并能从Web站点启动,所有这些操作都不会出现常见的安全警告和令人讨厌的安装提示。总之,WPF将以前Windows开发领域中的精华与当今的创新技术融为一体,得以构建现代化的富图形用户界面。
关于本书
本书深刻地介绍WPF技术,面向了解.NET平台、C#语言以及Visual Studio开发环境的专业开发人员。在学习本书前,不需要具备使用以前版本WPF的经验,而使用过WPF的开发人员可以通过阅读每章开头的“新增功能”来了解WPF新特性。
本书全面描述WPF的所有主要特性,从XAML(用于定义WPF用户界面的标记语言)到3D绘图和动画。本书个别之处会编写涉及.NET Framework其他特性的代码,如用于查询数据库的ADO.NET类。本书中不讨论这些内容。但如果需要了解有关.NET(而非特定于WPF)的特性的更多信息,请参阅Apress出版的许多专门介绍.NET的书籍。
内容概览
本书共包括33章。如果刚开始学习WPF,将发现按照章节顺序阅读本书是最容易的方法,因为后续章节常用到前面章节中演示的技术。
下面是本书每一章的主要内容:
第1章:WPF概述 介绍WPF的体系结构,WPF的DirectX基础设施,以及新的能自动改变用户界面尺寸的设备无关度量系统。
第2章:XAML 介绍用于定义用户界面的XAML标准。该章将讨论为什么创建XAML以及XAML的工作原理,并将用不同的编码方法创建基本的WPF窗口。
第3章:布局 深入研究在WPF窗口中用于组织元素的布局面板。该章将分析不同布局策略,并将构建一些普通类型的窗口。
第4章:依赖项属性 介绍WPF如何使用依赖项属性来支持重要特性,如数据绑定和动画。
第5章:路由事件 介绍WPF如何使用事件路由在用户界面元素中发送冒泡路由事件或隧道路由事件,还介绍所有WPF元素都支持的一组基本鼠标、键盘以及多点触控事件。
第6章:控件 分析所有Windows开发人员都十分熟悉的控件,如按钮、文本框和标签,还讨论它们在WPF中的区别。
第7章:Application类 介绍WPF应用程序模型。在该章中您将看到如何创建单实例和基于文档的WPF应用程序。
第8章:元素绑定 介绍WPF数据绑定。在该章中您将看到如何将任意类型的对象绑定到用户界面。
第9章:命令 介绍WPF命令模型,使用WPF命令模型可将多个控件连接到同一个逻辑操作。
第10章:资源 介绍如何使用资源在程序集中嵌入二进制文件,以及如何在整个用户界面中重用重要的对象。
第11章:样式和行为 解释WPF样式系统,使用WPF样式可为一整组控件应用一套通用属性值。
第12章:形状、画刷和变换 介绍WPF中的2D绘图模型。在该章中您将学习如何创建形状、使用变换改变元素,以及使用渐变画刷、图像画刷和平铺图像画刷绘制特殊效果。
第13章:几何形状和图画 深入分析2D绘图。在该章中您将学习如何创建包含弧线和曲线的复杂路径,以及如何高效地使用复杂图形。
第14章:效果和可视化对象 介绍低级图形编程。在该章中您将使用像素着色器应用Photoshop风格的效果,手动构建位图,并为了优化绘图性能而使用WPF的可视化层。
第15章:动画基础 研究WPF的动画框架,通过WPF动画框架可使用简单的声明式标记将动态效果集成到应用程序中。
第16章:高级动画 研究更高级的动画技术,如关键帧动画、基于路径的动画以及基于帧的动画。该章还将列举一个详细示例,展示如何使用代码创建和管理动态的动画。
第17章:控件模板 介绍如何通过插入定制的模板来为任意WPF控件提供动态的新外观(以及新行为),您还将看到如何使用模板构建能够换肤的应用程序。
第18章:自定义元素 研究如何扩展现有的WPF控件,以及如何创建自己的控件。在该章中您将看到几个示例,包括基于模板的颜色拾取器、可翻转的面板、自定义的布局容器,以及执行自定义绘图的装饰元素。
第19章:数据绑定 展示如何从数据库获取信息,将获取的信息插入到自定义的数据对象中,并将这些数据对象绑定到WPF控件。您还将学习如何借助虚拟化技术提高大型数据绑定列表的性能,以及如何使用验证方法捕获编辑错误。
第20章:格式化绑定的数据 展示将原始数据转换为包含图片、控件以及选择效果的富数据显示的一些技巧。
第21章:数据视图 分析如何在数据绑定窗口中使用视图在数据项列表中导航,以及应用过滤、分类和分组。
第22章:列表、树和网格 带您浏览WPF中的富数据控件,包括ListView、TreeView和DataGrid。
第23章:窗口 分析WPF中窗口的工作原理。在该章中您还将学习如何创建不规则形状的窗口,以及如何使用Vista玻璃效果,您还将通过定制任务栏跳转列表、缩略图以及图标重叠实现大部分Windows 7特性。
第24章:页面和导航 介绍如何使用WPF构建页面,以及保持跟踪导航历史。该章还将介绍如何构建驻留于浏览器中的WPF应用程序,这种应用程序可从Web站点启动。
第25章:菜单、工具栏和功能区 分析面向命令的控件,如菜单和工具栏。在该章还将使用可免费下载的Ribbon控件尝试更富有现代气息的用户界面。
第26章:声音和视频 介绍WPF媒体支持。在该章中您将看到如何控制声音和视频的播放,以及如何合成动画和生动鲜活的效果。
第27章:3D绘图 研究WPF中对绘制3D图形的支持。在该章将学习如何创建和变换3D对象,以及如何为3D对象应用动画效果,甚至还会看到如何在3D表面上放置可交互的2D控件。
第28章:文档 介绍WPF的富文档支持。在该章中您将学习如何使用流文档以尽可能便于阅读的方式呈现大量文本,并将学习如何用固定文档显示准备打印的页面,甚至还将学习如何使用RichTextBox控件提供文档编辑功能。
第29章:打印 演示WPF的打印模型,可通过打印模型在打印文档中绘制文本和图形。在该章中您还将学习如何管理页面设置和打印队列。
第30章:与Windows窗体进行交互 分析如何在同一个应用程序—— 甚至在同一个窗口中,结合使用WPF和Windows窗体内容。
第31章:多线程 介绍如何创建具有良好响应能力,在后台执行耗时任务的WPF应用程序。
第32章:插件模型 展示如何创建可扩展的、能动态发现和加载独立组件的应用程序。
第33章:ClickOnce部署 展示如何使用ClickOnce安装模型部署WPF应用程序。
使用本书的前提条件
为运行WPF 4.5应用程序,计算机必须安装Windows 7、Windows 8或带有Service Pack 2的 Windows Vista,还需要.NET Framework 4.5。为创建WPF 4.5应用程序(并打开本书中提供的示例项目),需要安装Visual Studio 2012,Visual Studio 2012中包含了.NET Framework 4.5。
还有一种选择。不使用任何版本的Visual Studio,可使用Expression Blend(一种面向图形的设计工具)来构建和测试WPF应用程序。总体而言,Expression Blend是面向图形设计人员的工具,他们使用该工具创建绚丽夺目的内容;而对于编写大量代码的编程人员来说,Visual Studio则是理想工具。本书假定使用的是Visual Studio。如果准备使用Expression Blend,务必选用明确支持WPF的版本(与某些Visual Studio版本绑定在一起的版本仅用于Metro开发,不支持WPF)。到撰写本书时为止,支持WPF的Expression Blend版本是称为Blend + Sketchflow Preview for Visual Studio 2012的预览版本,网址是http://tinyurl.com/cgar5lz。
代码示例和URL
查看Apress网站或www.prosetech.com以下载最新的示例代码是个好主意。测试在本书中介绍的大部分更复杂的示例需要用到这些代码示例,因为在本书示例中那些较次要的细节通常被忽略了。本书关注最重要的部分,以免为阐明概念而无谓地占用过多篇幅。
为下载本书的源代码,可访问Web站点 http://www.prosetech.com查找本书的页面,也可从http://www.tupwk.com.cn/downpage下载本书的源代码。您将发现在本书中提及的链接的列表,从而不需要键入任何内容就可以找到重要工具和例子。
反馈
本书力争成为WPF编程爱好者的最佳辅导和参考资料。为达到该目标,您的评论和建议对我们来说是非常有帮助的。您可将本书的缺点、优点及其他反馈信息直接发送到邮箱wkservice@vip.163.com,我们将不胜感激。
atthewMacDonald是一位作家、教育家,曾三次荣膺微软MVP。他迄今已经撰写了十多本有关.NET编程的书籍,包括ProSilverlight 5 in C#(由Apress于2012年出版)和Beginning ASP.NET4.5 in C#(由Apress于2012年出版) 。他还曾撰写Your Brain: TheMissing Manual(由O’Reilly Media于2008年出版)一书,该书讲述如何最大限度地激发大脑潜能,出版后受到广大读者的热烈欢迎。Matthew目前与妻子和两个女儿居住在多伦多。
第Ⅰ部分 基础知识
第1章 WPF概述 3
1.1 Windows图形演化 3
1.1.1 DirectX:新的图形引擎 4
1.1.2 硬件加速与WPF 4
1.2 WPF:高级API 4
1.3 分辨率无关性 5
1.3.1 WPF单位 6
1.3.2 系统DPI 7
1.3.3 位图和矢量图形 9
1.4 WPF体系结构 10
1.5 WPF 4.5 13
1.5.1 WPF工具包 14
1.5.2 Visual Studio 2012 14
1.6 小结 16
第Ⅰ部分 基础知识
第1章 WPF概述 3
1.1 Windows图形演化 3
1.1.1 DirectX:新的图形引擎 4
1.1.2 硬件加速与WPF 4
1.2 WPF:高级API 4
1.3 分辨率无关性 5
1.3.1 WPF单位 6
1.3.2 系统DPI 7
1.3.3 位图和矢量图形 9
1.4 WPF体系结构 10
1.5 WPF 4.5 13
1.5.1 WPF工具包 14
1.5.2 Visual Studio 2012 14
1.6 小结 16
第2章 XAML 17
2.1 理解XAML 17
2.1.1 WPF之前的图形用户界面 17
2.1.2 XAML变体 19
2.1.3 XAML编译 19
2.2 XAML基础 20
2.2.1 XAML名称空间 21
2.2.2 代码隐藏类 22
2.3 XAML中的属性和事件 24
2.3.1 简单属性与类型转换器 25
2.3.2 复杂属性 26
2.3.3 标记扩展 28
2.3.4 附加属性 29
2.3.5 嵌套元素 30
2.3.6 特殊字符与空白 32
2.3.7 事件 34
2.3.8 完整的Eight Ball Answer示例 35
2.4 使用其他名称空间中的类型 36
2.5 加载和编译XAML 38
2.5.1 只使用代码 38
2.5.2 使用代码和未经编译的XAML 40
2.5.3 使用代码和编译过的XAML 42
2.5.4 只使用XAML 44
2.6 小结 45
第3章 布局 47
3.1 理解WPF中的布局 47
3.1.1 WPF布局原则 47
3.1.2 布局过程 48
3.1.3 布局容器 48
3.2 使用StackPanel面板进行简单
布局 50
3.2.1 布局属性 52
3.2.2 对齐方式 52
3.2.3 边距 53
3.2.4 最小尺寸、最大尺寸以及显式地
设置尺寸 54
3.2.5 Border控件 56
3.3 WrapPanel和DockPanel面板 57
3.3.1 WrapPanel面板 57
3.3.2 DockPanel面板 58
3.3.3 嵌套布局容器 59
3.4 Grid面板 60
3.4.1 调整行和列 63
3.4.2 布局舍入 64
3.4.3 跨越行和列 65
3.4.4 分割窗口 66
3.4.5 共享尺寸组 69
3.4.6 UniformGrid面板 72
3.5 使用Canvas面板进行基于
坐标的布局 72
3.5.1 Z顺序 73
3.5.2 lnkCanvas元素 74
3.6 布局示例 76
3.6.1 列设置 76
3.6.2 动态内容 77
3.6.3 组合式用户界面 79
3.7 小结 80
第4章 依赖项属性 83
4.1 理解依赖项属性 83
4.1.1 定义依赖项属性 84
4.1.2 注册依赖项属性 84
4.1.3 添加属性包装器 86
4.1.4 WPF使用依赖项属性的方式 87
4.1.5 共享的依赖项属性 88
4.1.6 附加的依赖项属性 88
4.2 属性验证 90
4.2.1 验证回调 90
4.2.2 强制回调 91
4.3 小结 93
第5章 路由事件 95
5.1 理解路由事件 95
5.1.1 定义、注册和封装路由事件 95
5.1.2 共享路由事件 96
5.1.3 引发路由事件 96
5.1.4 处理路由事件 97
5.2 事件路由 99
5.2.1 RoutedEventArgs类 100
5.2.2 冒泡路由事件 100
5.2.3 处理挂起的事件 103
5.2.4 附加事件 103
5.2.5 隧道路由事件 105
5.3 WPF事件 106
5.3.1 生命周期事件 106
5.3.2 输入事件 108
5.4 键盘输入 108
5.4.1 处理按键事件 109
5.4.2 焦点 111
5.4.3 获取键盘状态 112
5.5 鼠标输入 113
5.5.1 鼠标单击 115
5.5.2 捕获鼠标 115
5.5.3 鼠标拖放 116
5.6 多点触控输入 118
5.6.1 多点触控的输入层次 119
5.6.2 原始触控 119
5.6.3 操作 122
5.6.4 惯性 124
5.7 小结 125
第Ⅱ部分 进一步研究WPF
第6章 控件 129
6.1 控件类 129
6.1.1 背景画刷和前景画刷 130
6.1.2 字体 132
6.1.3 鼠标光标 136
6.2 内容控件 137
6.2.1 Content属性 138
6.2.2 对齐内容 140
6.2.3 WPF内容原则 141
6.2.4 标签 142
6.2.5 按钮 142
6.2.6 工具提示 145
6.3 特殊容器 151
6.3.1 ScrollViewer 152
6.3.2 GroupBox 154
6.3.3 TabItem 154
6.3.4 Expander 155
6.4 文本控件 158
6.4.1 多行文本 158
6.4.2 选择文本 159
6.4.3 拼写检查 160
6.4.4 PasswordBox 162
6.5 列表控件 162
6.5.1 ListBox 163
6.5.2 ComboBox 166
6.6 基于范围的控件 166
6.6.1 Slider 167
6.6.2 ProgressBar 168
6.7 日期控件 169
6.8 小结 171
第7章 Application类 173
7.1 应用程序的生命周期 173
7.1.1 创建Application对象 173
7.1.2 派生自定义的Application类 174
7.1.3 应用程序的关闭方式 176
7.1.4 应用程序事件 177
7.2 Application类的任务 179
7.2.1 显示初始界面 179
7.2.2 处理命令行参数 180
7.2.3 访问当前Application对象 181
7.2.4 在窗口之间进行交互 182
7.2.5 单实例应用程序 184
7.3 程序集资源 189
7.3.1 添加资源 189
7.3.2 检索资源 190
7.3.3 pack URI 192
7.3.4 内容文件 193
7.4 本地化 193
7.4.1 构建能够本地化的用户界面 194
7.4.2 使应用程序为本地化做好准备 194
7.4.3 管理翻译过程 195
7.5 小结 200
第8章 元素绑定 201
8.1 将元素绑定到一起 201
8.1.1 绑定表达式 202
8.1.2 绑定错误 203
8.1.3 绑定模式 203
8.1.4 使用代码创建绑定 205
8.1.5 使用代码检索绑定 206
8.1.6 多绑定 207
8.1.7 绑定更新 210
8.1.8 绑定延迟 211
8.2 绑定到非元素对象 211
8.2.1 Source属性 212
8.2.2 RelativeSource属性 212
8.2.3 DataContext属性 213
8.3 小结 214
第9章 命令 215
9.1 理解命令 215
9.2 WPF命令模型 216
9.2.1 ICommand接口 217
9.2.2 RoutedCommand类 217
9.2.3 RoutedUICommand类 218
9.2.4 命令库 219
9.3 执行命令 220
9.3.1 命令源 220
9.3.2 命令绑定 221
9.3.3 使用多命令源 223
9.3.4 微调命令文本 224
9.3.5 直接调用命令 224
9.3.6 禁用命令 225
9.3.7 具有内置命令的控件 227
9.4 高级命令 229
9.4.1 自定义命令 229
9.4.2 在不同位置使用相同的命令 230
9.4.3 使用命令参数 232
9.4.4 跟踪和翻转命令 233
9.5 小结 237
第10章 资源 239
10.1 资源基础 239
10.1.1 资源集合 239
10.1.2 资源的层次 241
10.1.3 静态资源和动态资源 242
10.1.4 非共享资源 243
10.1.5 通过代码访问资源 244
10.1.6 应用程序资源 244
10.1.7 系统资源 245
10.2 资源字典 246
10.2.1 创建资源字典 246
10.2.2 使用资源字典 247
10.2.3 在程序集之间共享资源 248
10.3 小结 251
第11章 样式和行为 253
11.1 样式基础 253
11.1.1 创建样式对象 256
11.1.2 设置属性 257
11.1.3 关联事件处理程序 258
11.1.4 多层样式 259
11.1.5 通过类型自动应用样式 261
11.2 触发器 262
11.2.1 简单触发器 262
11.2.2 事件触发器 264
11.3 行为 266
11.3.1 获取行为支持 266
11.3.2 理解行为模型 267
11.3.3 创建行为 268
11.3.4 使用行为 270
11.3.5 Blend中的设计时行为支持 271
11.4 小结 271
第Ⅲ部分 图画和动画
第12章 形状、画刷和变换 275
12.1 理解形状 275
12.1.1 Shape类 276
12.1.2 矩形和椭圆 277
12.1.3 改变形状的尺寸和放置形状 278
12.1.4 使用Viewbox控件缩放形状 280
12.1.5 直线 282
12.1.6 折线 283
12.1.7 多边形 284
12.1.8 直线线帽和直线交点 286
12.1.9 点划线 287
12.1.10 像素对齐 288
12.2 画刷 289
12.2.1 SolidColorBrush画刷 290
12.2.2 LinearGradientBrush画刷 290
12.2.3 RadialGradientBrush画刷 292
12.2.4 ImageBrush画刷 294
12.2.5 平铺的ImageBrush画刷 295
12.2.6 VisualBrush画刷 297
12.2.7 BitmapCacheBrush画刷 298
12.3 变换 299
12.3.1 变换形状 300
12.3.2 变换元素 302
12.4 透明 303
12.4.1 使元素半透明 303
12.4.2 透明掩码 304
12.5 小结 306
第13章 几何图形和图画 307
13.1 路径和几何图形 307
13.1.1 直线、矩形和椭圆图形 308
13.1.2 使用GeometryGroup
组合形状 309
13.1.3 使用CombinedGeometry融合
几何图形 311
13.1.4 使用PathGeometry绘制曲线和
直线 313
13.1.5 微语言几何图形 318
13.1.6 使用几何图形进行剪裁 319
13.2 图画 320
13.2.1 显示图画 322
13.2.2 导出插图 324
13.3 小结 326
第14章 效果和可视化对象 327
14.1 可视化对象 327
14.1.1 绘制可视化对象 328
14.1.2 在元素中封装可视化对象 329
14.1.3 命中测试 332
14.1.4 复杂的命中测试 334
14.2 效果 338
14.2.1 BlurEffect类 338
14.2.2 DropShadowEffect类 339
14.2.3 ShaderEffect类 340
14.3 WriteableBitmap类 342
14.3.1 生成位图 342
14.3.2 写入WriteableBitmap对象 343
14.3.3 更高效的像素写入 345
14.4 小结 347
第15章 动画基础 349
15.1 理解WPF动画 349
15.1.1 基于时间的动画 349
15.1.2 基于属性的动画 350
15.2 基本动画 351
15.2.1 Animation类 351
15.2.2 使用代码创建动画 353
15.2.3 同时发生的动画 358
15.2.4 动画的生命周期 358
15.2.5 Timeline类 359
15.3 故事板 362
15.3.1 故事板 363
15.3.2 事件触发器 363
15.3.3 重叠动画 366
15.3.4 同步的动画 367
15.3.5 控制播放 367
15.3.6 监视动画进度 371
15.4 动画缓动 373
15.4.1 使用缓动函数 373
15.4.2 在动画开始时应用缓动与在动画
结束时应用缓动 374
15.4.3 缓动函数类 375
15.4.4 创建自定义缓动函数 377
15.5 动画性能 379
15.5.1 期望的帧率 380
15.5.2 位图缓存 382
15.6 小结 384
第16章 高级动画 385
16.1 动画类型回顾 385
16.1.1 动态变换 386
16.1.2 动态改变画刷 390
16.1.3 动态改变像素着色器 392
16.2 关键帧动画 393
16.2.1 离散的关键帧动画 395
16.2.2 缓动关键帧 395
16.2.3 样条关键帧动画 396
16.3 基于路径的动画 397
16.4 基于帧的动画 399
16.5 使用代码创建故事板 402
16.5.1 创建主窗口 403
16.5.2 创建Bomb用户控件 405
16.5.3 投弹 406
16.5.4 拦截炸弹 409
16.5.5 统计炸弹和清理工作 410
16.6 小结 412
第Ⅳ部分 模板和自定义元素
第17章 控件模板 417
17.1 理解逻辑树和可视化树 417
17.2 理解模板 422
17.2.1 修饰类 424
17.2.2 剖析控件 426
17.3 创建控件模板 428
17.3.1 简单按钮 429
17.3.2 模板绑定 430
17.3.3 改变属性的触发器 431
17.3.4 使用动画的触发器 434
17.4 组织模板资源 435
17.4.1 分解按钮控件模板 436
17.4.2 通过样式应用模板 438
17.4.3 自动应用模板 439
17.4.4 由用户选择的皮肤 440
17.5 构建更复杂的模板 442
17.5.1 嵌套的模板 443
17.5.2 修改滚动条 445
17.5.3 控件模板示例 450
17.6 可视化状态 451
17.7 小结 452
第18章 自定义元素 453
18.1 理解WPF中的自定义元素 454
18.2 构建基本的用户控件 456
18.2.1 定义依赖项属性 456
18.2.2 定义路由事件 459
18.2.3 添加标记 460
18.2.4 使用控件 462
18.2.5 命令支持 462
18.2.6 深入分析用户控件 465
18.3 创建无外观控件 466
18.3.1 修改颜色拾取器的代码 466
18.3.2 修改颜色拾取器的标记 467
18.3.3 精简控件模板 469
18.4 支持可视化状态 472
18.4.1 开始编写FlipPanel类 473
18.4.2 选择部件和状态 475
18.4.3 默认控件模板 476
18.4.4 使用FlipPanel控件 482
18.4.5 使用不同的控件模板 483
18.5 创建自定义面板 485
18.5.1 两步布局过程 485
18.5.2 Canvas面板的副本 488
18.5.3 更好的WrapPanel面板 489
18.6 自定义绘图元素 492
18.6.1 OnRender( )方法 493
18.6.2 评估自定义绘图 494
18.6.3 自定义绘图元素 495
18.6.4 创建自定义装饰元素 497
18.7 小结 498
第Ⅴ部分 数据
第19章 数据绑定 501
19.1 使用自定义对象绑定到
数据库 501
19.1.1 构建数据访问组件 502
19.1.2 构建数据对象 504
19.1.3 显示绑定对象 505
19.1.4 更新数据库 508
19.1.5 更改通知 508
19.2 绑定到对象集合 510
19.2.1 显示和编辑集合项 510
19.2.2 插入和移除集合项 513
19.2.3 绑定到ADO.NET对象 514
19.2.4 绑定到LINQ表达式 515
19.3 提高大列表的性能 518
19.3.1 虚拟化 518
19.3.2 项容器再循环 519
19.3.3 缓存长度 519
19.3.4 延迟滚动 520
19.4 验证 521
19.4.1 在数据对象中进行验证 521
19.4.2 自定义验证规则 526
19.4.3 响应验证错误 528
19.4.4 获取错误列表 529
19.4.5 显示不同的错误指示符号 530
19.4.6 验证多个值 533
19.5 数据提供者 535
19.5.1 ObjectDataProvider 536
19.5.2 XmlDataProvider 539
19.6 小结 541
第20章 格式化绑定的数据 543
20.1 数据绑定回顾 543
20.2 数据转换 544
20.2.1 使用StringFormat属性 545
20.2.2 值转换器简介 546
20.2.3 使用值转换器设置字符串
的格式 547
20.2.4 使用值转换器创建对象 549
20.2.5 应用条件格式化 551
20.2.6 评估多个属性 552
20.3 列表控件 554
20.4 列表样式 555
20.4.1 ItemContainerStyle 556
20.4.2 包含复选框或单选按钮的ListBox
控件 557
20.4.3 交替条目样式 559
20.4.4 样式选择器 561
20.5 数据模板 564
20.5.1 分离和重用模板 566
20.5.2 使用更高级的模板 567
20.5.3 改变模板 569
20.5.4 模板选择器 570
20.5.5 模板与选择 573
20.5.6 改变项的布局 577
20.6 ComboBox控件 578
20.7 小结 581
第21章 数据视图 583
21.1 View对象 583
21.1.1 检索视图对象 584
21.1.2 视图导航 584
21.1.3 以声明方式创建视图 587
21.2 过滤、排序与分组 588
21.2.1 过滤集合 588
21.2.2 过滤DataTable对象 591
21.2.3 排序 592
21.2.4 分组 593
21.2.5 实时成型 598
21.3 小结 599
第22章 列表、树和网格 601
22.1 ListView控件 601
22.1.1 使用GirdView创建列 602
22.1.2 创建自定义视图 606
22.2 TreeView控件 613
22.2.1 创建数据绑定的TreeView
控件 614
22.2.2 将DataSet对象绑定到TreeView
控件 617
22.2.3 即时创建节点 618
22.3 DataGrid控件 621
22.3.1 改变列的尺寸与重新安排列 622
22.3.2 定义列 623
22.3.3 设置列的格式和样式 628
22.3.4 设置行的格式 629
22.3.5 显示行细节 630
22.3.6 冻结列 631
22.3.7 选择 632
22.3.8 排序 632
22.3.9 编辑 633
22.4 小结 635
第Ⅵ 窗口、页面和富控件
第23章 窗口 639
23.1 Window类 639
23.1.1 显示窗口 641
23.1.2 定位窗口 642
23.1.3 保存和还原窗口位置 642
23.2 窗口交互 644
23.2.1 窗口所有权 646
23.2.2 对话框模型 647
23.2.3 通用对话框 648
23.3 非矩形窗口 649
23.3.1 简单形状窗口 649
23.3.2 具有形状内容的透明窗口 651
23.3.3 移动形状窗口 653
23.3.4 改变形状窗口的尺寸 653
23.3.5 组合到一起:窗口的自定义控件
模板 655
23.4 Windows 7任务栏编程 658
23.4.1 使用跳转列表 659
23.4.2 改变任务栏图标和预览 663
23.5 小结 667
第24章 页面和导航 669
24.1 基于页面的导航 669
24.2 基于页面的界面 670
24.2.1 创建一个具有导航窗口的基于
页面的简单应用程序 670
24.2.2 Page类 672
24.2.3 超链接 673
24.2.4 在框架中驻留页面 675
24.2.5 在另一个页面中驻留页面 677
24.2.6 在Web浏览器中驻留页面 678
24.3 页面历史 678
24.3.1 深入分析WPF中的URI 678
24.3.2 导航历史 679
24.3.3 维护自定义的属性 681
24.4 导航服务 682
24.4.1 通过编程进行导航 682
24.4.2 导航事件 683
24.4.3 管理日志 684
24.4.4 向日志添加自定义项 685
24.4.5 使用页函数 689
24.5 XAML浏览器应用程序 692
24.5.1 创建XBAP应用程序 692
24.5.2 部署XBAP应用程序 693
24.5.3 更新XBAP应用程序 695
24.5.4 XBAP应用程序的安全性 695
24.5.5 完全信任的XBAP应用程序 696
24.5.6 组合XBAP/独立应用程序 697
24.5.7 为不同的安全级别编写代码 697
24.5.8 在网页中嵌入XBAP
应用程序 702
24.6 WebBrowser控件 702
24.6.1 导航到页面 703
24.6.2 构建DOM树 704
24.6.3 使用.NET代码为网页添加
脚本 706
24.7 小结 708
第25章 菜单、工具栏和功能区 709
25.1 菜单 709
25.1.1 Menu类 710
25.1.2 菜单项 710
25.1.3 ContextMenu类 712
25.1.4 菜单分隔条 713
25.2 工具栏和状态栏 714
25.2.1 ToolBar控件 714
25.2.2 StatusBar控件 717
25.3 功能区 718
25.3.1 添加功能区 719
25.3.2 应用程序菜单 720
25.3.3 选项卡、组与按钮 722
25.3.4 富工具提示 724
25.3.5 带有快捷键提示的键盘访问 725
25.3.6 改变功能区的大小 726
25.3.7 快速访问工具栏 729
25.4 小结 730
第26章 声音和视频 731
26.1 播放WAV音频 731
26.1.1 SoundPlayer类 731
26.1.2 SoundPlayerAction类 733
26.1.3 系统声音 733
26.2 MediaPlayer类 734
26.3 MediaElement类 735
26.3.1 使用代码播放音频 736
26.3.2 处理错误 737
26.3.3 使用触发器播放音频 737
26.3.4 播放多个声音 739
26.3.5 改变音量、平衡、速度以及
位置 740
26.3.6 将动画同步到音频 742
26.3.7 播放视频 744
26.3.8 视频效果 744
26.4 语音 747
26.4.1 语音合成 747
26.4.2 语音识别 749
26.5 小结 751
第27章 3D绘图 753
27.1 3D绘图基础 753
27.1.1 视口 754
27.1.2 3D对象 754
27.1.3 摄像机 761
27.2 深入研究3D绘图 765
27.2.1 着色和法线 766
27.2.2 更复杂的形状 769
27.2.3 Model3DGroup集合 769
27.2.4 使用材质 771
27.2.5 纹理映射 773
27.3 交互和动画 777
27.3.1 变换 777
27.3.2 旋转 778
27.3.3 飞过 779
27.3.4 跟踪球 781
27.3.5 命中测试 782
27.3.6 3D表面上的2D元素 786
27.4 小结 789
第Ⅶ部分 文档和打印
第28章 文档 793
28.1 理解文档 793
28.2 流文档 794
28.2.1 流内容元素 795
28.2.2 设置内容元素的格式 796
28.2.3 创建简单的流文档 797
28.2.4 块元素 799
28.2.5 内联元素 804
28.2.6 通过代码与元素进行交互 809
28.2.7 文本对齐 812
28.3 只读流文档容器 813
28.3.1 缩放 814
28.3.2 创建页面和列 815
28.3.3 从文件加载文档 817
28.3.4 打印 818
28.4 编辑流文档 818
28.4.1 加载文件 819
28.4.2 保存文件 821
28.4.3 设置所选文本的格式 822
28.4.4 获取单个单词 824
28.5 固定文档 825
28.6 批注 826
28.6.1 批注类 827
28.6.2 启用批注服务 828
28.6.3 创建批注 829
28.6.4 检查批注 832
28.6.5 响应批注更改 835
28.6.6 在固定文档中保存批注 835
28.6.7 自定义便签的外观 836
28.7 小结 837
第29章 打印 839
29.1 基本打印 839
29.1.1 打印元素 840
29.1.2 变换打印输出 842
29.1.3 打印不显示的元素 844
29.1.4 打印文档 845
29.1.5 在文档打印输出中控制页面 848
29.2 自定义打印 851
29.2.1 使用可视化层中的类
进行打印 851
29.2.2 自定义多页打印 854
29.3 打印设置和管理 859
29.3.1 保存打印设置 859
29.3.2 打印页面范围 859
29.3.3 管理打印队列 860
29.4 通过XPS进行打印 863
29.4.1 为打印预览创建XPS文档 863
29.4.2 写入内存的XPS文档 864
29.4.3 通过XPS直接打印到
打印机 865
29.4.4 异步打印 866
29.5 小结 866
第Ⅷ部分 其他主题
第30章 与Windows窗体进行交互 869
30.1 访问互操作性 869
30.2 混合窗口和窗体 870
30.2.1 为WPF应用程序添加窗体 870
30.2.2 为Windows窗体应用程序
添加WPF窗口 870
30.2.3 显示模态窗口和窗体 871
30.2.4 显示非模态窗口和窗体 871
30.2.5 启用Windows窗体控件的
可视化风格 872
30.3 创建具有混合内容的窗口 872
30.3.1 WPF和Windows窗体
“空域” 873
30.3.2 在WPF中驻留Windows
窗体控件 874
30.3.3 使用WPF和Windows窗体
用户控件 876
30.3.4 在Windows窗体中驻留WPF
控件 877
30.3.5 访问键、助记码和焦点 879
30.3.6 属性映射 880
30.4 小结 882
第31章 多线程 883
31.1 了解多线程模型 883
31.1.1 Dispatcher类 884
31.1.2 DispatcherObject类 884
31.2 BackgroundWorker类 887
31.2.1 简单的异步操作 887
31.2.2 创建BackgroundWorker
对象 888
31.2.3 运行BackgroundWorker
对象 889
31.2.4 跟踪进度 891
31.2.5 支持取消 893
31.3 小结 894
第32章 插件模型 895
32.1 在MAF和MEF两者间
进行选择 895
32.2 了解插件管道 896
32.2.1 管道的工作原理 897
32.2.2 插件文件夹结构 898
32.2.3 为使用插件模型准备
解决方案 899
32.3 创建使用插件模型的
应用程序 900
32.3.1 协定 901
32.3.2 插件视图 901
32.3.3 插件 902
32.3.4 插件适配器 902
32.3.5 宿主视图 903
32.3.6 宿主适配器 904
32.3.7 宿主 904
32.3.8 更多插件 907
32.4 与宿主进行交互 908
32.5 可视化插件 912
32.6 小结 915
第33章 ClickOnce部署 917
33.1 理解应用程序部署 917
33.1.1 ClickOnce安装模型 918
33.1.2 ClickOnce部署的局限性 919
33.2 简单的ClickOnce发布 920
33.2.1 设置发布者和产品 920
33.2.2 启动发布向导 922
33.2.3 理解部署文件的结构 926
33.2.4 安装ClickOnce应用程序 926
33.2.5 更新ClickOnce应用程序 928
33.3 ClickOnce附加选项 928
33.3.1 发布版本 928
33.3.2 更新 929
33.3.3 文件关联 930
33.3.4 发布选项 931
33.4 小结 932