前 言
PREFACE
对几乎所有的应用程序来说,用户界面都是重要的组成部分。现在,用户对这些界面的要求越来越高。当然,我们仍需要传统的菜单驱动式GUI。但是除此之外,许多应用程序还需要能够播放视频、运行动画、采用二维或三维图形,以及调用不同的文档。无论是通过安装的桌面客户端还是通过Web浏览器来访问应用程序,上述功能都必须可以正常使用。
一直以来,Windows上的这些用户界面功能都是以不同方式提供的。例如,开发人员可以使用.NET Framework中的Windows Forms来创建Windows GUI,使用HTML、Java小程序或JavaScript代码创建Web浏览器界面,或者使用 Windows Media Player、Adobe的Flash Player等软件播放视频,文档格式则以Microsoft Word、Adobe PDF或其他软件进行定义。很明显,开发人员面临着巨大的挑战:如何使用不同的技术,为不同的客户端创建一致的用户界面呢?这相当困难。
Windows Presentation Foundation(WPF),最初代号为“Avalon”,就是为解决这一难题而设计的。WPF为所有的这些用户界面提供一致的技术基础,从而大幅度简化了开发人员的工作。WPF采用更为现代的方法,支持视频、动画、二维或三维图形以及各种类型的文档,从而可以让用户以全新的方式处理信息。此外,WPF还为桌面客户端和浏览器客户端提供了通用基础,大大简化了二者的应用程序开发工作。
另一个长期困扰用户界面开发人员的问题是,如何创建高效界面需要的不同角色。软件开发人员需要编写相应的界面逻辑,但是,他们并不是定义界面感观的最佳人选。一般来说,人机交互领域的设计人员和专家更适合这一工作。但是在以前的技术(如Windows Forms)背景下,这些问题完全由开发人员决定。开发人员和设计人员之间没有实现真正有效的协作。WPF借助于可扩展应用程序标记语言(XAML)解决这一问题。XAML 是一种基于XML的语言,允许以声明方式指定用户界面,而非代码。这样,开发工具就能够根据设计人员创建的可视化显示,更加容易地生成和使用界面规范。Microsoft的一款新产品 Expression Blend就是为此而设计的。设计人员可以使用它创建界面外观,然后生成所创建界面的XAML定义。开发人员将这些定义导入Visual Studio之后,就可以着手构建界面所要求的逻辑了。这样就实现了界面与逻辑的分离。
通过提供更强大的图形支持功能,WPF使得一系列数据可视化选项成为可能,而这依靠 Windows Forms或其他的早期技术是不可能实现的。通过本书的学习,你可以了解WPF程序的编写全过程,从而深入地研究这一未来主流的界面设计技术。
本书的主要内容
第1章主要介绍.NET 3.0的各组成部分,包括WPF、WCF、WF、LINQ、CardSpace、C#3.0、LINQ等,以及如何配置开发环境以构建.NET 3.0/C# 3.0/LINQ应用程序。
第2章介绍在WPF中建立基于浏览器类型的应用程序和基于安装类型的应用程序F、WPF的架构,以及在应用程序中使用的一些全局对象。
第3章主要讲述XAML语法及其与.NET代码间的关系。
第4章介绍使用Expression Blend创建了第一个基于XAML的应用程序,并且使用本地简单的XML数据对应用程序进行了数据绑定。
第5章我们使用Visual Studio 2005建立了一个应用程序以及如何将应用程序数据绑定到WCF所建立的多个服务的技术,如何扩展应用的原型等。
第6章我们学习了在WPF开发中需要用到的多种不同的布局控件、多种面板诸如StackPanel、DockPanel,以及如何使用它们相互协作有效地对界面上的控件实施布局。
第7章讲述了XAML API中主要控件类型、数据绑定的不同方式,以及通过XMLDataProvider表现独立的XML数据及外部XML的文件。另外,还介绍了功能更强的ObjectDataProvider。
第8章主要介绍画笔的使用;主要的几何形状和路径;画曲线和贝塞尔曲线、绘制多边形、WPF图像API及操作位图图像;使用MediaElement控件编写多媒体界面。
第9章介绍了支持XAML的几种动画类型、Spline的概念、时间线的概念,以及使用Expression Blend制作动画。
第10章介绍了用点和顶点在3D空间中制作简单的2D图形;在XAML中使用ViewPort3D定义3D可视范围;不同类型的灯光和材质,并应用到对象或场景中;如何从网格中建立对象模型。
第11章介绍了使用WPF技术建立各种应用程序类型,以及它们的部署和在最终用户桌面上的管理;WPF窗体应用程序在“在线/离线”模式下的行为;如何使用ClickOnce技术实现智能更新等。
本书的读者对象
本书适合于有编程经验的开发人员,最好具有在.NET Framework平台上使用C#语言编程的经验,因为涉及WinForm和WebForm两种应用的编程,所以希望读者熟悉这两种应用开发。
学习本书所需要的准备工作
为了能够运行本书中的示例,请确保您的计算机上安装了如下软件:
—带有IIS 5或更高版本的Windows XP、Windows Server 2003或Windows Vista操作系统;
—安装有Visual Studio 2005(安装时已包含.NET Framework 2.0)、.NET Framework 3.0、Windows Vista SDK、Extensions for Windows Workflow Foundation、Extensions for Windows Presentation Foundation、Windows Communication Foundation、C# 3.0和LINQ社区预览版。
本书中的代码不能在.NET Framework 2.0上运行,所有的安装文件和代码都包含在随书附赠的DVD光盘中。
用户支持
笔者很重视读者的意见,并想知道每位读者对本书的看法,包括读者喜欢和不喜欢的内容,以及读者希望笔者下一次能够完善的地方。您可以发送电子邮件(地址为wangsaokui@sohu.com)向笔者反馈意见。电子邮件的主题中请一定要包含书名。
示例代码
本书包含2张DVD配套光盘,在光盘中有所有章节的示例代码。
勘误表
笔者已经尽最大努力确保本书中的文字和代码没有错误,但文字和程序bug肯定是在所难免的。如果你发现本书存在错误,例如错别字或错误的代码片断,请反馈给笔者,将不胜感激。勘误表可以节约其他读者学习本书的时间,而且能够帮助笔者对本书进行更高质量的修改和完善。笔者将定期检查反馈信息,如果正确,将被粘贴到本书的勘误页面上,或者在本书的后续版本中使用,可访问www.broadview.com.cn网站。
E-mail支持
如果您希望直接向笔者咨询本书中的问题,可以发送电子邮件到wangsaokui@ hotmail.com,典型的电子邮件应包括以下内容:
(1)在主题中必须有本书的书名和存在问题的页码。
(2)邮件内容应包括读者的名字、联系信息和问题。
目 录
CONTENTS
第1章 .NET 3.0 Framework介绍
1.1 .NET 3.0 Framework介绍
1.1.1 Windows Presentation Foundation概述
1.1.2 Windows Communication Foundation概述
1.1.3 Windows Workflow Foundation概述
1.1.4 CardSpace概述
1.1.5 C# 3.0和LINQ技术概述
1.2 .NET 3.0 Framework开发环境的安装
1.2.1 开发环境的安装过程
1.2.2 重要工具
1.3 小结
第2章 WPF应用程序编程
2.1 什么是WPF应用程序
2.2 应用程序的部署
2.2.1 选择XAML浏览器应用程序
2.2.2 选择安装类型的应用程序
2.3 Windows Presentation Foundation的基础架构
2.3.1 System.Threading.DispatcherObject
2.3.2 System.Windows.DependencyObject
2.3.3 System.Windows.Media.Visual
2.3.4 System.Windows.UIElement
2.3.5 System.Windows.FrameworkElement
2.4 如何编写WPF应用程序
2.4.1 使用Application对象
2.4.2 支持Application级别的Navigation事件
2.4.3 使用Application对象管理窗体
2.4.4 管理应用程序的关闭
2.5 窗体管理
2.5.1 使用Window对象
2.5.2 使用NavigationWindow对象
2.5.3 使用Page对象
2.5.4 管理Windows
2.6 小结
第3章 XAML语言
3.1 XAML本质
3.1.1 命名空间
3.1.2 生成类
3.1.3 属性
3.1.4 子元素
3.2 属性
3.2.1 属性-元素语法
3.2.2 附加属性
3.3 标记扩展
3.3.1 NullExtension
3.3.2 TypeExtension
3.3.3 StaticExtension
3.3.4 StaticResource
3.3.5 DynamicResource
3.3.6 ArrayExtension
3.3.7 Binding
3.3.8 TemplateBinding
3.4 代码分离
3.5 使用自定义类型
3.6 通用的子内容模式
3.6.1 Panels面板
3.6.2 Singular Content单一内容
3.6.3 Items集合
3.6.4 Collections集合
3.7 导入XAML
3.7.1 在运行时解析XAML
3.7.2 导入BAML
3.8 小结
第4章 第一个WPF程序
4.1 用Expression Blend设计器建立应用程序
4.1.1 用Expression Blend建立基本用户界面
4.1.2 执行基本的数据绑定
4.1.3 运行程序
4.2 在浏览器中浏览XAML
4.2.1 文档根部的Grid
4.2.2 场景资源
4.2.3 触发器
4.2.4 用户界面定义
4.3 高级WPF用户界面
4.3.1 设置渐变的背景
4.3.2 3D凝胶效果的实现
4.3.3 倒影的实现
4.3.4 动画的实现
4.4 小结
第5章 建立一个连接到WCF的WPF程序
5.1 WCF概述
5.2 建立一个WCF服务
5.3 建立WCF服务应用程序
5.3.1 建立WCF服务项目
5.3.2 添加数据库
5.3.3 添加服务接口
5.3.4 建立前端应用
5.3.5 将用户界面连接到服务
5.3.6 实现产品详细信息服务的方法
5.3.7 实现用户界面对产品服务的调用
5.3.8 完整的XAML
5.4 小结
第6章 布局
6.1 布局基础
6.2 布局控件
6.2.1 StackPanel
6.2.2 DockPanel
6.2.3 使用Grid控件
6.2.4 Canvas
6.2.5 对于Tab页面布局使用TabPanel
6.2.6 WrapPanel
6.3 小结
第7章 控件
7.1 控件基础
7.2 常用控件
7.2.1 Button控件
7.2.2 CheckBox控件
7.2.3 ComboBox控件
7.2.4 Slider控件
7.2.5 Image控件
7.2.6 ListBox控件
7.2.7 RadioButton控件
7.2.8 Menu控件
7.2.9 ContextMenu控件(上下文菜单控件)
7.2.10 ListView控件
7.3 XAML控件的数据绑定
7.3.1 控件绑定
7.3.2 执行XML绑定
7.3.3 使用外部数据源
7.4 小结
第8章 图像和多媒体
8.1 图像API
8.1.1 Brush类的使用
8.1.2 Shape类的使用
8.1.3 转换的实现
8.1.4 使用图像API
8.2 多媒体的使用
8.2.1 MediaElement类的使用
8.2.2 Media的转换
8.3 小结
第9章 动画
9.1 动画基础
9.2 动画类型
9.3 关键帧
9.3.1 在彩色动画中使用关键帧
9.3.2 在Double动画中使用关键帧
9.3.3 在点动画中使用关键帧
9.3.4 在字符串动画中使用关键帧
9.4 时间线和故事板的使用
9.5 在Expression Blend中使用动画和时间线
9.6 在Expression Blend中匹配动画事件
9.7 小结
第10章 WPF中的3D图像
10.1 3D编程基础
10.1.1 点的理解
10.1.2 顶点的理解
10.1.3 法线的理解
10.2 原理与代码
10.2.1 研究ViewPort3D对象
10.2.2 设置摄像机
10.2.3 设置光线
10.2.4 使用材质
10.3 复杂示例
10.4 3D的转换
10.4.1 转换的运用
10.4.2 缩放的运用
10.4.3 旋转的运用
10.5 小结
第11章 程序部署
11.1 部署一个WPF Windows应用程序
11.1.1 以在线或离线方式进行部署
11.1.2 运行和更新应用程序
11.1.3 浏览安装过程
11.2 仅以在线模式部署一个WPF Windows应用程序
11.2.1 建立和发布一个WPF Web应用程序
11.2.2 配置Web应用程序为可信任的
11.3 小结