深入浅出WPF(china-pub首发)
基本信息
编辑推荐
CSDN最火爆专家博主”水之真谛”心血结晶
深入之美 精辟分析WPF源代码,洞察功能背后隐藏的深刻设计理念
浅出之美 最浅显的生活案例,融化最抽象的高级概念
分离之美 掌握UI与逻辑如何真正分离,享受变与不变的快感
自然之美 全新的数据驱动UI理念,让数据重归核心地位
感观之美 强大的图形引擎,实现绝对震撼的UI视觉
内容简介回到顶部↑
wpf是微软新一代开发技术,涵盖了桌面应用程序开发、网络应用程序开发和移动应用程序开发,是微软开发技术未来十年的主要方向。
本书的内容分为两大部分。第一部分是学习wpf开发的基础知识,包括xaml语言的详细剖析、wpf控件的使用、用户界面布局的介绍。第二部分是作为优秀wpf程序员所应掌握的知识,包括依赖对象和数据关联、路由事件与命令、数据模板与控件模板、绘图与动画等。
本书作者具有多年wpf开发经验,历经多个大型项目,现任微软(美国)下载中心项目组高级开发工程师。本书是作者多年来学习和使用wpf的经验总结。
本书包含了众多wpf面试点,作者凭借书中的知识顺利通过微软(美国)的面试。
本书的内容分为两大部分。第一部分是学习wpf开发的基础知识,包括xaml语言的详细剖析、wpf控件的使用、用户界面布局的介绍。第二部分是作为优秀wpf程序员所应掌握的知识,包括依赖对象和数据关联、路由事件与命令、数据模板与控件模板、绘图与动画等。
本书作者具有多年wpf开发经验,历经多个大型项目,现任微软(美国)下载中心项目组高级开发工程师。本书是作者多年来学习和使用wpf的经验总结。
本书包含了众多wpf面试点,作者凭借书中的知识顺利通过微软(美国)的面试。
作译者回到顶部↑
目录回到顶部↑
写作缘起
wpf之what & why
致谢
第一部分 深入浅出话xaml
第1章 xaml概览 2
1.1 xaml是什么 2
1.2 xaml的优点 3
第2章 从零起步认识xaml 5
2.1 新建wpf项目 5
2.2 剖析最简单的xaml代码 8
第3章 系统学习xaml语法 14
3.1 xaml文档的树形结构 14
3.2 xaml中为对象属性赋值的语法 17
3.2.1 使用标签的attribute为对象属性赋值 18
3.2.2 使用typeconverter类将xaml标签的attribute与对象的property进行映射 19
3.2.3 属性元素 21
3.2.4 标记扩展(markup extensions) 24
3.3 事件处理器与代码后置 26
3.4 导入程序集和引用其中的名称空间 28
3.5 xaml的注释 30
wpf之what & why
致谢
第一部分 深入浅出话xaml
第1章 xaml概览 2
1.1 xaml是什么 2
1.2 xaml的优点 3
第2章 从零起步认识xaml 5
2.1 新建wpf项目 5
2.2 剖析最简单的xaml代码 8
第3章 系统学习xaml语法 14
3.1 xaml文档的树形结构 14
3.2 xaml中为对象属性赋值的语法 17
3.2.1 使用标签的attribute为对象属性赋值 18
3.2.2 使用typeconverter类将xaml标签的attribute与对象的property进行映射 19
3.2.3 属性元素 21
3.2.4 标记扩展(markup extensions) 24
3.3 事件处理器与代码后置 26
3.4 导入程序集和引用其中的名称空间 28
3.5 xaml的注释 30
前言回到顶部↑
WPF之What & Why
自古以来,生产工具就代表着生产力的先进程度——生产力的发展要求人们不断研发出新的生产工具,新生产工具的诞生又使生产效率出现飞跃。作为劳动生产的一种,计算机软件开发也需要工具,随着程序员们手中的工具越来越强大,软件开发的效率和质量也越来越高。善于学习和掌握新工具、新技术的程序员们也总是能得到更多的实惠。
微软Windows操作系统成功推出已有十多年,在Windows系统平台上从事图形用户界面(Graphic User Interface,GUI)程序开发的程序员数不胜数。GUI程序员们手中的开发工具历经了Win32 API→MFC(及同类产品)→ActiveX/COM/Visual Basic→Windows Forms的变迁,每一次变迁都使开发效率和质量产生飞跃。从2007年开始,微软推出了它的新一代GUI开发工具Windows Presentation Foundation(直译为Windows表示基础,WPF),并且把WPF定为未来十年Windows平台GUI开发的主要技术。时至今日,不但Windows Vista、Windows 7、Windows Server 2008、Windows Server 2008 R2等系统已经无缝集成了WPF,连Visual Studio 2010等重要产品业已使用WPF进行开发。可见微软在WPF技术方面的务实精神与决心。
什么是WPF
WPF是Windows Presentation Foundation的简称,顾名思义是专门用来编写程序表示层的技术和工具。
WPF是做什么用的呢?让我们从分析一个客户的需求开始,解答这个问题。经常会有一些朋友找我写项目,有一次,一家医疗单位的技术主管找到我说:“你能不能用WPF为我们开发一套管理系统呀?”其实,这就是一个对WPF的典型误解。误解在何处呢?主要是没有弄清WPF的功用。当今的程序,除了一些非常小巧的实用工具外,大部分程序都是多层架构的程序。一提到多层架构,一般就至少包含3层:数据层、业务逻辑层和表示层(它们的关系如图1所示)。
这3层的功能大致如下:
数据层:用于存储数据,多由数据库构成,有时候也用数据文件能辅助存储数据。比如医院的药品列表、人员列表、病例列表等都存储在这一层。
业务逻辑层:用于根据需求使用计算机程序表达现实的业务逻辑。比如哪些医生可以给哪些病人看病,从挂号到取药都有什么流程,从住院到出院有哪些流程,都可以由这层来实现。这一层一般会通过一组服务(Service)向表示层公开自己的各个功能。因为这一层需要与数据层进行交互,所以经常会划分出一个名为“数据访问层”(Data Access Layer,DAL)的子层专门负责数据的存取。
图1
表示层:负责把数据和流程展示给用户看。对于同一组来自业务逻辑层的数据,我们可以选择多种表达方式。比如对于同一张药品单,如果想以短信的形式发送给药房,可以以一串字符的形式来表达;如果客户想打印药品单的详细内容,可以以表格的形式来表达;如果客户想直观地看到每种药品占总价格的比例,我们可以使用饼图来表达。除了用于表示数据,表示层还负责展示流程、响应用户操作等。而且,表示层程序并不拘泥于桌面程序,很多表示层程序都运行在手机或浏览器里。表示层程序也常被称为客户端程序。
WPF的功能就是用来编写应用程序的表示层,至于业务逻辑层和数据层的开发也有专门的新技术。比如业务逻辑层的新技术是WCF(Windows Communication Foundation)和WF(Windows Workflow Foundation)。微软平台上用于开发表示层的技术不算少,包括WPF、Windows Forms、ASP.NET、Silverlight等。换句话说,无论使用哪种技术作为表示层技术,程序的逻辑层和数据层都是相同的。所以“使用WPF开发管理系统”这个提法是不对的。
WPF与Silverlight的关系
目前,.NET开发人员学习WPF的回报是相当高的,原因是几乎整个微软新一代开发框架都能看到WPF的影子。微软的新一代开发技术框架包括Windows Presentation Foundation(WPF)、Windows Communication Foundation(WCF)和Windows Workflow Foundation(WF,据说因为与World Wildlife Fund的缩写WWF冲突了,所以去掉了一个W)。本书无疑是讲WPF,而WCF的用途是编写分布式应用程序的业务逻辑层,并以网络服务的形式暴露给客户端的服务消费者,基于WCF和Entity Framework的WCF Data Service和WCF RIA Service是微软迄今最佳的数据访问层,而这一数据访问层的最佳消费者就是WPF和Silverlight。所以,学习WPF技术可以为WCF 的学习锦上添花。WF的主要作用是设计工作流,而设计工作流的编程语言正是WPF中的界面设计语言——XAML,也就是说,学习完WPF,WF也会了一小半。
如果说学会WPF后WF算是会了一小半,那么学习完WPF后,Silverlight可以算是会了80%,为什么这么说呢?因为微软原本就定义Silverlight是WPF的一个子集、是WPF的“网络版”(Silverlight的开发代号是WPF/E,意为WPF简化版)。为了让WPF在浏览器里跑起来,微软所做的事情就是在技术理念不变的情况下对WPF进行“瘦身”——去掉一些不常用的功能、简化一些功能的实现,对多组实现同一目的的类库进行删减、只保留一组,再添加一些网络通信的功能。通过下表,我们就能看到Silverlight与WPF的技术重叠率之高:
技术项目 在WPF中 在Silverlight中
自古以来,生产工具就代表着生产力的先进程度——生产力的发展要求人们不断研发出新的生产工具,新生产工具的诞生又使生产效率出现飞跃。作为劳动生产的一种,计算机软件开发也需要工具,随着程序员们手中的工具越来越强大,软件开发的效率和质量也越来越高。善于学习和掌握新工具、新技术的程序员们也总是能得到更多的实惠。
微软Windows操作系统成功推出已有十多年,在Windows系统平台上从事图形用户界面(Graphic User Interface,GUI)程序开发的程序员数不胜数。GUI程序员们手中的开发工具历经了Win32 API→MFC(及同类产品)→ActiveX/COM/Visual Basic→Windows Forms的变迁,每一次变迁都使开发效率和质量产生飞跃。从2007年开始,微软推出了它的新一代GUI开发工具Windows Presentation Foundation(直译为Windows表示基础,WPF),并且把WPF定为未来十年Windows平台GUI开发的主要技术。时至今日,不但Windows Vista、Windows 7、Windows Server 2008、Windows Server 2008 R2等系统已经无缝集成了WPF,连Visual Studio 2010等重要产品业已使用WPF进行开发。可见微软在WPF技术方面的务实精神与决心。
什么是WPF
WPF是Windows Presentation Foundation的简称,顾名思义是专门用来编写程序表示层的技术和工具。
WPF是做什么用的呢?让我们从分析一个客户的需求开始,解答这个问题。经常会有一些朋友找我写项目,有一次,一家医疗单位的技术主管找到我说:“你能不能用WPF为我们开发一套管理系统呀?”其实,这就是一个对WPF的典型误解。误解在何处呢?主要是没有弄清WPF的功用。当今的程序,除了一些非常小巧的实用工具外,大部分程序都是多层架构的程序。一提到多层架构,一般就至少包含3层:数据层、业务逻辑层和表示层(它们的关系如图1所示)。
这3层的功能大致如下:
数据层:用于存储数据,多由数据库构成,有时候也用数据文件能辅助存储数据。比如医院的药品列表、人员列表、病例列表等都存储在这一层。
业务逻辑层:用于根据需求使用计算机程序表达现实的业务逻辑。比如哪些医生可以给哪些病人看病,从挂号到取药都有什么流程,从住院到出院有哪些流程,都可以由这层来实现。这一层一般会通过一组服务(Service)向表示层公开自己的各个功能。因为这一层需要与数据层进行交互,所以经常会划分出一个名为“数据访问层”(Data Access Layer,DAL)的子层专门负责数据的存取。
图1
表示层:负责把数据和流程展示给用户看。对于同一组来自业务逻辑层的数据,我们可以选择多种表达方式。比如对于同一张药品单,如果想以短信的形式发送给药房,可以以一串字符的形式来表达;如果客户想打印药品单的详细内容,可以以表格的形式来表达;如果客户想直观地看到每种药品占总价格的比例,我们可以使用饼图来表达。除了用于表示数据,表示层还负责展示流程、响应用户操作等。而且,表示层程序并不拘泥于桌面程序,很多表示层程序都运行在手机或浏览器里。表示层程序也常被称为客户端程序。
WPF的功能就是用来编写应用程序的表示层,至于业务逻辑层和数据层的开发也有专门的新技术。比如业务逻辑层的新技术是WCF(Windows Communication Foundation)和WF(Windows Workflow Foundation)。微软平台上用于开发表示层的技术不算少,包括WPF、Windows Forms、ASP.NET、Silverlight等。换句话说,无论使用哪种技术作为表示层技术,程序的逻辑层和数据层都是相同的。所以“使用WPF开发管理系统”这个提法是不对的。
WPF与Silverlight的关系
目前,.NET开发人员学习WPF的回报是相当高的,原因是几乎整个微软新一代开发框架都能看到WPF的影子。微软的新一代开发技术框架包括Windows Presentation Foundation(WPF)、Windows Communication Foundation(WCF)和Windows Workflow Foundation(WF,据说因为与World Wildlife Fund的缩写WWF冲突了,所以去掉了一个W)。本书无疑是讲WPF,而WCF的用途是编写分布式应用程序的业务逻辑层,并以网络服务的形式暴露给客户端的服务消费者,基于WCF和Entity Framework的WCF Data Service和WCF RIA Service是微软迄今最佳的数据访问层,而这一数据访问层的最佳消费者就是WPF和Silverlight。所以,学习WPF技术可以为WCF 的学习锦上添花。WF的主要作用是设计工作流,而设计工作流的编程语言正是WPF中的界面设计语言——XAML,也就是说,学习完WPF,WF也会了一小半。
如果说学会WPF后WF算是会了一小半,那么学习完WPF后,Silverlight可以算是会了80%,为什么这么说呢?因为微软原本就定义Silverlight是WPF的一个子集、是WPF的“网络版”(Silverlight的开发代号是WPF/E,意为WPF简化版)。为了让WPF在浏览器里跑起来,微软所做的事情就是在技术理念不变的情况下对WPF进行“瘦身”——去掉一些不常用的功能、简化一些功能的实现,对多组实现同一目的的类库进行删减、只保留一组,再添加一些网络通信的功能。通过下表,我们就能看到Silverlight与WPF的技术重叠率之高:
技术项目 在WPF中 在Silverlight中
序言回到顶部↑
写作缘起
本书的写作缘起几年前我学习WPF。因为我是从Windows Forms开发转来做WPF开发的,学习过程中遇到很多新概念、新特性,其中包括Data Binding、路由事件、命令、各种模板等。我的工作风格是对于每个新知识,一定先把它理解透彻、搞明白再应用于项目中,不然总感觉使用起来不放心,于是就对照已有的英文书籍和MSDN逐一研究这些知识点。每有所得,都喜欢写成博客发表在网上,一来供大家学习参考,二来做一个积累、防止以后遗忘。博客发表之后收到很多读者的反馈和鼓励,大家希望我能把这些文章编撰成册、形成一本学习教材,于是我下决心开始写这本书。这本书的名字也就随了系列博客文章的名字——《深入浅出WPF》。
之所以叫“深入浅出”,原因有两个。名为“深入”,是想把WPF也诠释一番,所以书中的每个例子都有可供剖析的实例,对于一些重要概念,我通过分析WPF的源代码给予阐述(.NET Framework的部分源代码是向开发人员开放的,其中就包含WPF的源代码)。名为“浅出”,是因为几乎每个概念我都会用生活中浅显易懂的例子进行类比,让读者可以轻松理解,降低学习抽象知识的痛苦。
为本书起这个名字,也是出于我对《深入浅出MFC》这本书的景仰之情。我刚刚开始学编程的时候正是MFC流行的年代,《深入浅出MFC》这本书给我的学习风格打下了深深的烙印。其中对我影响最深刻的,一个是它对MFC源码的分析,另一个是“勿在浮沙筑高台”、凡事必究其理的探索精神。在后来的近十年工作中,分析和学习微软开发框架的源码成为我工作的方法论。本书中包含了一些对WPF源码的分析,帮助大家对WPF有个透彻的理解。我以《深入浅出MFC》一书为准绳和鞭策自己的力量,希望能为大家奉上一本有用的好书。
写博客容易,写书难。写博客,内容上可以不那么连贯、不太严谨,写书就不一样了,要求每个知识点都要仔细琢磨、谨慎下笔,经常是写了满满一篇之后感觉不满意又删掉重来,直到我认为初级读者也能顺畅理解为止。多少个不眠之夜就是在这种字斟句酌中转瞬即逝,一年下来,头上也冒出了很多白发。我想,既然写书,那就要把自己的心血奉献给读者,这样才对得起读者也对得起自己。
本书并不是一本大而全的WPF宝典,而是WPF在实际工作中用到最多的部分。所以在“轻松幽默、深入浅出”的风格基础上,本书力求实用。写书的过程其实也是对WPF进行深耕的过程,本书写作过半时,我偶然获得一个机会可以参加微软的一个开发项目,面试我的是美国微软的一位高级项目经理(现在是我的老板),面试的内容就是WPF开发。我基本上都是用书中的原话作答,十分顺利——我获得了来美国工作的机会,目前负责微软下载中心管理工具的开发。我想,这也算是对本书内容的一次检验,衷心希望大家在学习完这本书中的内容后也能在自己的职业发展上获得进步。
毕竟我的水平有限,尽管下力气去写但还是感觉很粗浅;有些知识超出微软官方文档的覆盖,我也融入一点自己的判断,对WPF源码的阅读也是在探索中前行,所以,书中疏漏之处再所难免。希望大家能够多多给予宽容并提出宝贵的建议。我将在本书的后续版本中不断丰富内容、修改错误,让这本书成为一本“活书”、一直为大家服务下去。本书的纠错及更正将发布在http://www.cnblogs.com/prism。我的MSN是wpfgeek@live.com,期待与热爱WPF技术的朋友共同学习和探讨。
本书的写作缘起几年前我学习WPF。因为我是从Windows Forms开发转来做WPF开发的,学习过程中遇到很多新概念、新特性,其中包括Data Binding、路由事件、命令、各种模板等。我的工作风格是对于每个新知识,一定先把它理解透彻、搞明白再应用于项目中,不然总感觉使用起来不放心,于是就对照已有的英文书籍和MSDN逐一研究这些知识点。每有所得,都喜欢写成博客发表在网上,一来供大家学习参考,二来做一个积累、防止以后遗忘。博客发表之后收到很多读者的反馈和鼓励,大家希望我能把这些文章编撰成册、形成一本学习教材,于是我下决心开始写这本书。这本书的名字也就随了系列博客文章的名字——《深入浅出WPF》。
之所以叫“深入浅出”,原因有两个。名为“深入”,是想把WPF也诠释一番,所以书中的每个例子都有可供剖析的实例,对于一些重要概念,我通过分析WPF的源代码给予阐述(.NET Framework的部分源代码是向开发人员开放的,其中就包含WPF的源代码)。名为“浅出”,是因为几乎每个概念我都会用生活中浅显易懂的例子进行类比,让读者可以轻松理解,降低学习抽象知识的痛苦。
为本书起这个名字,也是出于我对《深入浅出MFC》这本书的景仰之情。我刚刚开始学编程的时候正是MFC流行的年代,《深入浅出MFC》这本书给我的学习风格打下了深深的烙印。其中对我影响最深刻的,一个是它对MFC源码的分析,另一个是“勿在浮沙筑高台”、凡事必究其理的探索精神。在后来的近十年工作中,分析和学习微软开发框架的源码成为我工作的方法论。本书中包含了一些对WPF源码的分析,帮助大家对WPF有个透彻的理解。我以《深入浅出MFC》一书为准绳和鞭策自己的力量,希望能为大家奉上一本有用的好书。
写博客容易,写书难。写博客,内容上可以不那么连贯、不太严谨,写书就不一样了,要求每个知识点都要仔细琢磨、谨慎下笔,经常是写了满满一篇之后感觉不满意又删掉重来,直到我认为初级读者也能顺畅理解为止。多少个不眠之夜就是在这种字斟句酌中转瞬即逝,一年下来,头上也冒出了很多白发。我想,既然写书,那就要把自己的心血奉献给读者,这样才对得起读者也对得起自己。
本书并不是一本大而全的WPF宝典,而是WPF在实际工作中用到最多的部分。所以在“轻松幽默、深入浅出”的风格基础上,本书力求实用。写书的过程其实也是对WPF进行深耕的过程,本书写作过半时,我偶然获得一个机会可以参加微软的一个开发项目,面试我的是美国微软的一位高级项目经理(现在是我的老板),面试的内容就是WPF开发。我基本上都是用书中的原话作答,十分顺利——我获得了来美国工作的机会,目前负责微软下载中心管理工具的开发。我想,这也算是对本书内容的一次检验,衷心希望大家在学习完这本书中的内容后也能在自己的职业发展上获得进步。
毕竟我的水平有限,尽管下力气去写但还是感觉很粗浅;有些知识超出微软官方文档的覆盖,我也融入一点自己的判断,对WPF源码的阅读也是在探索中前行,所以,书中疏漏之处再所难免。希望大家能够多多给予宽容并提出宝贵的建议。我将在本书的后续版本中不断丰富内容、修改错误,让这本书成为一本“活书”、一直为大家服务下去。本书的纠错及更正将发布在http://www.cnblogs.com/prism。我的MSN是wpfgeek@live.com,期待与热爱WPF技术的朋友共同学习和探讨。








点击看大图






加载中...
