标题：WPF完全揭秘
基本信息
原书名：Windows Presentation Foundation Unleashed
原出版社： Sams
作者：(美)Adam Nathan  
译者：瞿杰 单佐一 夏寒
丛书名： 图灵程序设计丛书.NET系列
出版社：人民邮电出版社
ISBN：9787115176042
出版日期：2008 年5月
开本：16开
页码：486
版次：1-1
编辑推荐
Amazon 超级畅销书，荣获全五星盛誉.
通俗易懂，深入实用，揭示大量技术内幕..
放飞WPF，赋予你超越梦想的能力
内容简介
windows presentation foundation (wpf) 是 net framework 3.0 的关键组件，是支持下一代视窗应用程序表现层编程的平台，也是微软新发布的vista操作系统的三大核心开发库之一，主要负责图形显示。本书是针对那些对用户界面开发感兴趣的软件开发人员编写的，易于理解，适合那些.net的新手，并有助于理解像microsoft expression blend这样产品的精髓。
本书适合各层次web开发人员阅读。
目录
第一部分　背景
第1章　为什么创造wpf　
1 1　回顾过去　
1 2　步入wpf　
1 3　作为 net framework的组成部分　
1 3 1　为托管代码而设计　
1 3 2　强调声明式描述　
1 4　小结　
第2章　xaml揭秘　
2 1　xaml定义　
2 2　元素和特性　
2 3　命名空间　
2 4　属性元素　
2 5　类型转换器　
2 6　标记扩展　
2 7　对象元素的子元素　
2 7 1　内容属性　
2 7 2　集合项　
2 7 3　更多类型转换　
2 8　编译：将xaml与过程式代码混合使用　
2 8 1　在运行时加载和解析xaml　
2 8 2　编译xaml　
2 8 3　xaml关键字　
2 9　小结　
2 9 1　抱怨1：xml太过冗长不便于输入　
2 9 2　抱怨2：基于xml的系统性能差　
第3章　wpf的重要新概念　
3 1　逻辑树与可视树　
3 2　依赖属性　
3 2 1　依赖属性的实现　
3 2 2　变更通知　
3 2 3　属性值继承　
3 2 4　对多个提供程序的支持　
3 2 5　附加属性　
3 3　路由事件　
3 3 1　路由事件的实现　
3 3 2　路由策略和事件处理程序　
3 3 3　路由事件实践　
3 3 4　附加事件　
3 4　命令　
3 4 1　内建命令　
3 4 2　使用输入手势执行命令　
3 4 3　带有内建命令绑定的控件　
3 5　漫游类层次　
3 6　小结　
第二部分　构建wpf应用程序
第4章　wpf控件　
第5章　尺寸缩放、定位与变换元素　
第6章　使用面板做布局　
第7章　构建并部署应用程序　
第三部分　为专业开发人员设计的功能
第8章　资源　
第9章　数据绑定　
第10章　样式、模板、皮肤和主题　233
第四部分　通过富媒体使程序领先于时代
第11章　2d图形　
第12章　3d图形　
第13章　动画　
第14章　音频、视频、语音和文档　
第五部分　高级主题
第15章　与win32、windows form以及activex之间的互用性　
第16章　用户控件和自定义控件　
第17章　使用自定义面板做布局　
第六部分　附录
附录　有用的工具
译者序
能够有机会翻译本书这样的名著，我们都感到非常荣幸。经过4个月的辛苦努力，本书的中文译稿终于交到了出版社中，我们也总算可以松一口气了！ 
不得不承认，翻译是非常辛苦的一件工作。首先自己必须要对原文有通透的理解，然后再用流畅的汉语表达出来，同时还要避免术语的不一致，等等。在这次的翻译过程中遇到了很多问题，也放弃了一个又一个“美好”的双休日。虽然我本人已经有一些翻译经验，但是要管理多人来翻译一本书的确有一些难度。刚开始的时候，我负责制定翻译计划，规范翻译流程——谁负责哪一章节且应该在何时完成。 一切看起来似乎安排得很好，但计划不如变化快，实际的进度并没有我想象当中的顺利。在翻译的第一阶段，我们的整体进度明显落后，主要是由于每位译者工作都比较忙，没有办法把太多时间投入到翻译工作中。于是不得不调整翻译计划，并向出版社多申请了一个月的翻译时间，以防万一。现在看来这个“容灾方案”还是很有效的！
在本次翻译过程中，我们也遇到了不少的困难。夏寒家里发生了点意外，不得不在中途退出，没有参加本书的最后审校。但无论多么困难，他还是按时完成了第一稿，而且总体质量不错，在此向夏寒表示由衷的感谢！另外，我也“不幸”换了部门，折腾了大约1个月，其中的辛酸只有自己知道，不过这基本没有影响翻译进度，一切还算顺利！  
在此要感谢陈兴璐编辑，没有她的及时催促，也就不会让我们意识到进度的滞后；没有她一次又一次的审校意见，也就没有译稿的高质量。虽然有时也会和她在一些审校意见上产生一些小摩擦，但这都是必要的，大家都很清楚这是为了提高译稿的质量。在此还要感谢刘江总编辑，是他把这么一本好书引进了中国，让中国的读者可以在第一时间拜读这本WPF的“圣经”。对于本书的好我想大家也早有耳闻，在这里我就不再唠叨了，你自己买一本看看就明白了！对了，别忘了先看看原作者的序，它会告诉你这本书适不适合你以及你应该怎么读这本书，这也是我买每一本书之前必做的事情。
作为读者的你拿到本书的时候可能还是初春乍暖还寒的时节，但在阅读的时候你一定会体会到WPF所带给你的暖意。WPF的强大绝对是你无法想象的，充分发挥你的创造力，用WPF尝试着创造一些科幻般的应用程序吧！相信我，这绝对不是梦想！当你读完本书之后，你对这句话会有更深切的体会！
本书的第4、5、7、15章及附录由单佐一翻译，第11、12、13章由夏寒翻译，其余部分由我翻译。大家如果有任何意见和建议，或者想交流读书心得都可以通过我的博客（tonyqus cnblogs com）或电子邮箱（tonyqus@gmail com）与我取得联系。
另外还要感谢博客园（cnblogs com）的站长杜勇（dudu），他的辛劳园子里的兄弟都是有目共睹，很多朋友（当然也包括我）都是伴随着博客园一起成长的，没有博客园就没有今天的我们。在此也希望各位读者多多支持博客园，经常去博客园逛逛，相信大家会收获不少。
最后祝大家读书愉快，编码愉快！
前言
感谢你购买《WPF完全揭秘》！为避免让你感到失望，在这里我要先澄清一下，这不是一本关于Microsoft PowerPoint的书（许多人认为WPF是由PowerPoint演化而来的） ，WPF是微软最新的图形用户界面技术，这里的用户界面可以是普通的窗体、以文档为中心 的窗口、卡通动画、视频、逼真的3D环境，或者以上所有的组合！这项技术会让创建许多类型的应用程序变得比过去任何时候都要简单。例如，WPF可以使实现类似于Windows Media Player或Microsoft Word（或者至少WordPad）的应用程序变得相对简单，当然也可以创建类似于Microsoft PowerPoint的应用程序!  
自从2003年WPF公之于众开始（当时的开发代号为Avalon），其革命性的创建软件的方式引起了（理所应当的）高度关注，特别是使用Windows Forms和GDI进行开发的开发人员。创建有趣、有用、可分享的WPF示例来演示各种类型的技术并不难，而如果使用其他技术，那么它们很难实现。但从编程模型、基础概念和使用的基本术语来看，WPF与以前的技术完全不同。甚至查看WPF的源代码（我们可以用一个类似于 NET Reflector的工具来破解并打开WPF的组件）也会让人感到困惑，因为你寻找的那些代码经常不在你所期望的位置。再加上完成任何一个任务都有很多方式，和许多人一样，你会得出一个结论：WPF的学习曲线非常陡。
本书于是应运而生了。5年前，我编写了 NET and COM: The Complete Interoperability Guide，因为我觉得人们需要这样一本书，完整地讲解深奥和复杂的主题。WPF推出后，很明显在市场上肯定将不会缺WPF的书。但是我并不清楚，这些书能否通过实践的方式讲解WPF，同时引导人们理解这项技术及其独特的概念。因此，我在写本书时，确立了这样的目标：
以一种实用、易懂的方式来讲解基本概念，打好扎实的基础。
解决大多数人在学习这项技术时都会遇到的问题，以及演示如何完成一些最常见的任务。
成为一本权威的参考资料，这多亏WPF团队成员的参与，是他们设计、实现并且测试了这一技术。
讲清楚这项技术的缺点，而不只是将这项技术吹嘘成能解决所有问题的灵丹妙药。
要让书中的内容很容易查找，以便经常查阅。
希望你能认可本书已具备了以上这些特点。
本书适合的读者
这本书是为那些对用户界面感兴趣的软件开发人员编写的。无论你是在创建企业级商务应用程序，还是面向消费者的应用程序，抑或是一些可重用的控件，本书的许多内容都可帮助你发挥平台的最大功效。它易于理解，即使对那些 NET新手们也不难。如果你已经对WPF十分熟悉，我可以很自信地告诉你，你仍然可以从本书中学到一些东西。有一点是肯定的，它是你书架上一本不可或缺的参考书。
因为WPF不仅允许你创建独立的Windows应用程序，也允许你创建寄宿于Web浏览器的内容，所以任何一个想寻找Adobe Flash替代品的人都将感受到本书很有意思。虽然更轻量级的、跨平台Silverlight没有在本书中大量涉及，但书中许多概念与Silverlight中的是相同的，也适用于WPF/E。  
虽然本书的内容并不是为图形设计师定制的，但阅读它可以很大程度上帮助理解像Microsoft Expression Blend这样的微软产品的精髓。
现在概括一下这本书的内容。
涵盖了你所需要知道的关于XAML（eXtensible Application Markup Language）的一切，它是新的基于XML的语言，可用于创建易于改变样式的声明式用户界面。
以令人难以置信的深度讲解WPF特性：控件、布局、资源、数据绑定、样式、图形、动画等。
研究许多书中没有涉及的主题，如3D、语音、音频/视频、文档、位图特效等。
演示如何创建流行的UI元素，例如Microsoft Office System 2007中介绍的特性：Gallery、ScreenTip、自定义控件布局等。
演示如何创建复杂的UI机制，例如类似于Visual Studio的可折叠(collapsible)/可停靠(dockable)的窗口。
解释如何开发、部署所有类型的应用程序，包括基于导航的应用程序、寄宿于Web浏览器的应用程序以及带有好看的非矩形窗口的应用程序。
序言
推荐序一 
2006年年底，WPF(Windows Presentation Foundation)刚刚随着Windows Vista正式发布的时候，我在中国软件网上闲逛，看到两位软件业界资深人士孟岩、韩磊两位老兄针对WPF发布所写的《这一天终于来了》以及《“这一天终于来了”》两篇文章，还有孙辉先生发表的《WPF，一次洗牌……》文章，感慨良多。随着无数业界技术专家在全球范围内的摇旗呐喊，WPF终于开始进入主流视野。
如今事隔一年多，市面上已经有越来越多WPF相关的图书，也有越来越多的开发人员通过搜索引擎、论坛、博客等逐渐熟悉了WPF，WPF已经逐渐成为主流开发选择。但是，仍然有很多朋友对于WPF的定位感到疑惑，毕竟微软在用户交互界面端有太多的新技术。要想真正领会掌握WPF，我们必须先搞明白WPF的定位，也就是为什么微软会推出WPF？
比尔·盖茨在创建微软时曾经有一个梦想——要让每家每户的桌子上都有一台电脑，而且这台电脑上要运行微软的软件。从1975年开始，整个微软就在为这个梦想而奋斗。历史发展到21世纪，应用软件从当初注重性能（硬件的限制）、功能（大而全的软件）而逐步发展到更加注重用户体验。之所以出现这种趋势，是因为软件已经逐渐走下神坛，成为人们日常生活中所不可或缺的东西。而人们对日用品的选择标准就是：价廉物美。价廉导致S+S(Software plus Service)产生，而物美促使软件厂商对于用户体验越来越重视。
正是在这种大势之下，微软才会推出WPF对整个软件生态链催熟。WPF的出现解决了以下3个问题。
(1)更快速的开发更丰富的用户体验。使用WPF，可以在更短的时间内开发出来更加丰富的界面，以满足用户的需求。WPF的出现，使得我们可以逐渐远离使用控件搭积木开发用户交互界面的开发过程。虽然WPF目前仍然保留控件机制，但我个人认为主要是为了向下兼容。WPF的目标应该是消除控件，让你开发出来的软件根本看不出控件的特征，软件世界再也不是由Button+Textbox组成的怪物了。
(2)消除用户界面差异。历史在1995年进入一个鸿沟，开发人员突然变成了两大阵营：Browser/Server(B/S)开发人员以及Client/Server(C/S)开发。一个项目启动时，我们首先想到的是这个项目是使用B/S架构还是C/S架构，这两种架构各自有各自的好处，但对于开发人员的知识要求却完全不一样。使用B/S架构，要了解HTML语言以及HTTP协议等；使用C/S，你可能要了解套接字，要了解GDI+等。同样，在项目完成后，如果基于某种原因，需要将此软件架构进行改变。比如将一个C/S项目重新发布为B/S项目，那么对于整个开发团队来说，基本上相当于推倒重来。而现在到了应该弥补这个鸿沟的时候了。WPF正是背负着这个历史责任，同样一套编码，可以根据你的需要发布C/S架构(Windows Client应用)或者B/S架构(XBAP，XAML Browser Application)。
(3)软件开发团队的协作问题。软件开发团队的日常协作是一个非常大的问题，除了需求变更以外，第二个影响开发进度的就应该是团队协作性了。在软件团队中，我们比较熟悉开发人员、数据库管理人员、测试人员、运维人员、系统架构师等，而用户交互界面设计师或者说设计人员往往被我们忽视，但实际上，他们的工作成果才是与客户距离最近的。不过就现在的实际情况来说，设计人员与开发人员如何配合工作，是很多团队所头疼的，而WPF正可以解决此问题。因为WPF创造性地引入了XAML语言，开发人员以及设计人员使用这种统一的XML描述的语言进行沟通，将大大降低沟通成本。另外，微软原来为开发人员提供了功能强大的开发工具，也就是Visual Studio系列，而随着WPF的出现，微软也开始面向设计人员提供相应的设计工具：Expression Studio系列。这两套工具所使用的解决方案以及项目结构描述完全一致，也就是完全可以打开对方所创立的项目文件。
如果你浏览一下目前的Windows平台上的软件界面，它们基本上都大同小异，同样都是矩形的窗体，窗体上都是以矩形的控件进行排列。相信已经有很多朋友开始审美疲劳了。不知道有多少朋友在观赏那些好莱坞产的科幻大片时，陶醉于电影主角所使用的更自然更酷的软件交互界面。现在，掌握了WPF，你也能很容易地开发出这种下一代的软件交互界面了。
现在，这本由Adam Nathan所编著由瞿杰等三位译者翻译的《WPF揭密》就摆在你面前，掌握了它，你也就掌握了通往未来的钥匙……
推荐序二
我第一次接触到WPF(Windows Presentation Foundation)是在MSDN的一段视频上。这段视频演示了如何通过简单的操作来改变控件倾斜角度，轻松地实现一些绚丽的特效。当时，它给我的感觉就是，这将是未来界面设计的方向！
我真正开始使用WPF是在2006年。由于在微软工作的关系，近水楼台先得月，我很早就体验了WPF的beta版。使用之后的切身感受就是，参照一些例子就可以开发小程序，这非常简单，但是想要开发具有出色界面的程序就十分困难——不是 WPF难用，而是不知道怎么用！虽然当时有一些MSDN文章可以参考，但是缺乏系统的讲解。我依葫芦画瓢编写出了XAML，但不知道为什么会得到那种结果，这让我陷入了一种知其然而不知其所以然的窘境。WPF拥有很多新概念，比如“Dependency Properties”、“Routed Events”、“Logical Tree”以及“Visual Tree”等，如果开发人员只会使用这些概念，而没能系统深入地理解它们，必然会受制于它们，更无法开发出高效、绚丽的WPF界面。
2007年，当我准备系统学习WPF的时候，看到这本书，稍稍翻看了几页，顿时眼前一亮，如获至宝。书中把我心中困惑已久的一些问题阐释得清晰明了，还通过很多例子让WPF的学习过程变得非常轻松。我，从此踏上了轻松惬意的WPF之旅。
可能有人会说MSDN够用了，不需要再看其他的书。我认为这句话只对了一半！MSDN的确是一本百科全书，包罗万象，但是如果你要从头学一门新技术的话，MSDN并不是最合适的。你需要的是一条平坦的学习之路，需要的是一位能由浅入深、循序渐进指引你的导师，那么本书就非常适合。
书摘
第1章为什么创造WPF
本章内容
回顾过去
进入WPF殿堂
作为．NET Framework的组成部分
通常，电影和电视中的人物都是对现实生活中的人的夸张描述。他们比曰常人物更有吸引力，他们反映敏捷，对所要做的事情总是把握准确，并且他们使用的软件也和其人一样出色。
第一次给我留下深刻印象的是在1994年。当时我正在看一部叫作《叛逆性骚扰》(Disclosure，1994年出品)的电影，这部电影捧红了迈克尔·道格拉斯(Michael Douglas)和戴米·摩尔(Demi Moore出演)，还捧红了一个电子邮件程序，不过它看上去3I]MicrosoftOutlook完全不同。在整部影片中，这个程序的各种不同的可视化特性让我们如赴盛宴：一个旋转的三维字母“e”；消息打开时会展开，删除时又会被撕碎；可以支持“上墨(inking)”；打印消息时，会有平滑的动画(这个电子邮件程序还不是这部电影中最不切实际的软件，它还有一个“虚拟现实的数据库”，我们暂且不表)。
先别管可用性!长久以来，好莱坞的电影让我们明白，真实世界中的软件并没有达到应有的水平。你也能想到几个在电视或电影中见过的有意思的软件。但是现在，真实世界中的软件开始赶上好莱坞的标准!从传统的操作系统(例女[1Mac OS或最近的Windows Vista)中、为TiV0或box
设备设计的软件中，还有网页上的Flash动画中，你可能已经看到这样的趋势了。用户正对软件的使用体验充满越来越高的期待，一些公司正将大量时间和金钱投入到用户界面上，力求与竞争对手有所不同。
微软现在有一个新的解决方案，可以帮助人们创造21世纪的软件，它将满足这些高要求，却可以在更短的时间里、花更少的钱来做到。这个解决方案就是Windows Presentation Foundation(WPF)。
1 1 回顾过去
目前大多数基于Windows的用户界面都使用两种主要技术——GDl和USER子系统，它们是在1985年随Windows 1．0引进的。不过这几乎已经是技术世界的史前文物了。在二十世纪九十年代早期，OpenGL(由SGl公司创建)成为了一种在Windows或非Windows系统上进行高级2D和3D．的图形开发的流行图形库。从事计算机辅助设计、科学的可视化和游戏开发工作的人们大量使用。