与之前的版本相比,Visual Studio 2010 RC中在WPF开发方面有多个不同之处,特别是在图形、动画及媒体功能上,通过这些诸多改进,更能体现出WPF在开放应用中的优势。
WPF提供高级绘图和动画功能,以前只能从专用库(具体来说,就是MicrosoftWindows图形设备接口(GDI)和MicrosoftWindowsGDI+)使用这些功能。现在,WPF提供对多媒体、向量图形、动画和内容撰写的集成支持,使得开发人员可以轻松地生成悦目的用户界面和内容。使用MicrosoftVisualStudio.NET或者甚至文本编辑器(如Microsoft记事本),可以创建矢量图形或复杂的动画并将媒体集成到应用程序中。
WPF在图形和多媒体方面的新增功能,向开发人员引进了新的图形功能,这些功能具有如下优点:
与分辨率和设备无关的图形:WPF图形系统使用与设备无关的单元来支持分辨率和设备独立性。每个与设备无关的像素都会随系统上的每英寸点数设置自动缩放。
更高的精度:WPF坐标系使用双精度值,而不使用浮点值。转换值和不透明度值也是使用双精度值来表示。WPF还支持更广泛的颜色域(scRGB),并为管理来自不同颜色空间的输入提供了集成的支持。
高级图形和动画支持:WPF通过为您管理场景图简化了图形编程;您无需再担心场景处理、呈现循环和双线性内插算法。WPF提供了命中测试支持、集成的动画系统和全面的字母合成支持。
硬件加速:WPF图形系统旨在利用图形硬件来最小化CPU使用率。
WPF提供了一个极好的自定义对象模型,允许运用各种风格和已存在的各种元素模板。该模型是一个令人满意的新模型,允许将几乎任何元素放置在另一个元素中。通过这个新功能,在整个创建自定义控件的过程中,都不会遇到问题。当然,任何事物都不是绝对的,使用WPF创建自定义控件,也有可能会遇到一些问题。本部分内容包括在什么情况下需要考虑创建自定义控件,以及如何创建自定义控件。
接下来,将进入WPF应用程序的企业应用开发部分。使用WPF可以创建两种风格的应用程序:基于Windows的单机运行的应用程序与基于Web的应用程序。这两种类型的程序基于相同的代码,即XAML与.NET。这意味着为应用程序指定目标主机环境,只需要简单改变工程文件的设置并管理这些配置即可。这项功能是非常强大的。
对于开发人员和设计人员,WPF提供了统一的UI平台,因此他们只需学习一个模式,就可以获得无限可能的UI体验。对于.NET开发人员,其框架是熟悉的,并且它最终将减少提供最佳用户体验和通信逻辑所需的代码行数。对于设计人员,WPF提供的平台可消除内容、媒体和应用程序之间的边界。最重要的是,WPF可以使开发人员和设计人员同步紧密地合作来快速提供不同的连通体验。
当WPF和Silverlight越来越受到.NET开发人员重视的时候,两者间的界限也越来越模糊。WPF支持多种类型的触发器。一个简单的触发器附加到依赖关系属性后,当触发器条件满足的时候便会自动修改样式。除了简单触发器以外,WPF也支持可响应路由事件或使用数据绑定的触发器。Silverlight使用视觉状态管理器代替触发器。WPF当前并不提供该技术,但会在WPF4.0中添加。
由于名称的关系,WPF与WPF/E一直被认为是类似的东西。其实两者除了呈现UI的部分使用的是共通语言XAML之外,两者在本质上有很大的不同。甚至,XAML对WPF与Silverlight有不同的意义,也不能算是两者间共通的语言。
XAML对WPF来说,是一种把.NET程序语言改用XML来描述的方式。换句话说,XAML用在WPF上,像是另外一种程序语言。与C#,VB,IronPython相似。所以XAML能做的,C#,VB一样都可以做到。但是反过来,C#,VB能做的,XAML不一定能做到,因为XAML是为了配合开发工具,特别设计出来的一种语言,本身有他的局限性,所以还是得配合正规的程序语言,才能完成一个真正有用的程序。
但是以目前XAML所具备的能力,不靠C#,VB而做到平常简单Flash可以做到的,应该是没啥问题。因此,Application=Code+Markup的作者Petzold才会把这本书的结构写成先用以C#来写WPF程序,后半部才介绍XAML。避免大家误解WPF=XAML,XAML还可以用在WF上,所以并不局限于WPF,如果用了XAML,以为这就是WPF的全部,就大错特错。
然而,XAML对Silverlight来说,本质比较贴近SVG。XAML用来描述构成画面的结构树,然后配合Javascript去操作这颗表示UI的树,以达到互动的效果。所以对Silverlight来说,XAML像是用来扩充HTML/CSS原本不足的一组Tag。就像Firefox之中,一样可以用Javascript去操作SVG所描述的画面,藉以达成多媒体效果。
WPF支持多种类型的触发器。一个简单的触发器附加到依赖关系属性后,当触发器条件满足的时候便会自动修改样式。除了简单触发器以外,WPF也支持可响应路由事件或使用数据绑定的触发器。
【编辑推荐】