【IT168 技术】
WPF (Windows Presentation Foundation)是.NET框架的核心组件之一,允许开发人员打造丰富并且与众不同的Windows客户端应用。WPF 4包含了在生产力,性能和功能方面的重大改进,特别是在控件(Controls), XAML, 文本(Text), 图形(Graphics), Windows 7 集成(多点触摸(multitouch), 任务栏集成等), 核心基础(Core Fundamentals), 以及部署这几个方面。 本文是我在接下来的几个月里介绍其中一些改进和新特性的若干个贴子的第一篇。
不久我还将另写专文讨论VS 2010中的 WPF 和 Silverlight设计器中的一些重大进步,该设计器还包含了一堆改进。
控件
图1 WPF 4 控件
1 可用于打造富客户端的控件
WPF 4添加了各种新控件,使得客户端丰富的行业(line-of-business)应用的打造更加容易,也更快。新的也更丰富的控件集包括了象 DataGrid, DatePicker, 和 Calendar这样的行业应用必备控件。这些新控件与它们在Silverlight中的对应控件在API和行为方面99%的兼容,允许开发人员通过在 Silverlight和WPF实现间重用代码,在优化了工作流程的的同时,创建一个横跨客户端和web的一致的体验。
2 诀窍袋(Bag O’ Tricks)又回来了
我们还将发布被称为WPF诀窍袋(Bag O’ Tricks)的8个额外的控件的下载,它包括下列控件:AnimatingTilePanel, ColorPicker, InfoTextBox, ListPager, NumericUpDown, Reveal, TransitionsPresenter, TreeMapPanel。
3 Windows 7和Office Ribbon控件
在WPF 4发布之后不久,会推出一个新的WPF Ribbon控件供下载。它包括针对Windows 7 和 Office的皮肤,以及为终端用户所熟悉的所有的标准Ribbon特性,包括tab(选项卡)和 group(组),动态改变大小,快速访问工具栏(quick access toolbar),应用菜单,上下文相关选项卡(contextual tabs),键提示(key tips)等等。
图2 Windows 7和Office Ribbon控件
WPF Ribbon是完全可扩展的,以满足将来版本的设计指引的变化, 今天在这里有一个包含有限特性集的CTP。
图形(GRAPHICS)
1 缓存合成(Cached Composition)
这免去了
CPU
和 GPU重新渲染内容的代价,而允许GPU直接从缓存来做渲染。这个缓存理解被更新了的“脏”区域(dirty region),因此,举个例子来说,被缓存的文本块(textblock)中闪烁的光标,只需要在帧间重新渲染光标。甚至还有一个专门使用这些智慧缓存 的新Brush,实际上,就是一个性能超佳的的VisualBrush。
图3 Cached Composition
2 像素着色器(Pixel Shader)3的支持
WPF 4是建立在一个非常受欢迎的,最初是在 WPF 3.5 SP1中引进的着色器效果(ShaderEffect)支持之上的,允许应用程序使用像素着色器(Pixel Shader)的第三个版本来编写效果(Effects)。像素着色器第三个版本的着色器模型较之第二个版本,显著地更为先进,在支持的硬件上能允许更加 引人入胜的效果。
3 LayoutRounding (布局舍入)
WPF 4采用了UseLayoutRounding属性,最初是在Silverlight 2中引进的。WPF的布局引擎经常要计算亚像素的定位坐标,这会在定位于亚像素边界的元素在多个物理像素上做平滑处理(anti-aliased,消除锯 齿)时,造成渲染假象(artifact)。
UseLayoutRounding会迫使布局引擎将元素置于整数像素(whole pixel)边界上,从而除去由这个问题导致的大部分渲染假象,默认生成更清晰分明的界面。
4 动画缓动函数(Animation Easing Function)
不连续的,直线式和样条曲线(spline)式动画在WPF的以前版本中就支持,WPF 4引进了一个叫Easing Functions(缓动函数)的新概念,允许应用程序的作者使用动画创建流畅的行为。其使用方式多种多样,譬如,创建一个弹跳式(springy)行 为,或者添加对动画的预期等。缓动函数可以定制动画从开始进行到结尾的方式,内置的缓动函数提供了很大范围的行为,例如圆形的(circular),指数 型的(exponential),有弹性的(elastic),反弹型的(bouncy)动画进程等。其扩展性设计还允许应用程序的作者创建自定义的缓动 函数来定义他们的动画进程的方式。由于其之易用性,设计师可以毫不费力地创建自然流畅的动画。
图4 动画缓动函数
5 CleartypeHint
新的CleartypeHint附加属性允许应用程序的作者能在许多原先是无法使用的场合启用高质量的Cleartype文本渲染。这样的场合包括分层 窗口中的文字,VisualBrush, DrawingBrush, 和BitmapCacheBrush中的文字,以及任何中间的渲染对象的引入会导致灰度文本渲染的地方。
文本堆栈(TEXT STACK)
1 新的文本渲染堆栈(Text Rendering Stack)
WPF文本渲染堆栈(text rendering stack)已被完全替换掉了,这样的变化带来了文本渲染的清晰度,可配置性和对国际语言支持方面的显著改进。现在,新的文本堆栈支持显示优化的字符布 局,可生成可与Win32/GDI文字媲美的清晰度(sharpness):
图5 WPF文本渲染堆栈
WPF新的文本堆栈现在还支持显式选择锯齿(aliased),灰度(grayscale)和ClearType渲染模式:
图6 渲染模式
新的文本堆栈允许针对动态的或静态的文字优化的文本提示和对齐(text hinting and snapping),此外,新的文本堆栈现在还支持内嵌位图的字体,这允许以Win32用户所习惯的清晰度(sharpness)来渲染许多东亚字体。
2 BindableRun
自WPF的最初发布起来,Run.Text一直是个普通的CLR属性。这意味着,Run.Text缺乏WPF依赖属性系统的所有好处,最明显的就是其绑 定的能力。在WPF 4中,我们将Run.Text转化成了依赖属性,允许开发人员使用WPF提供的第一个可绑定的Run。这里有更多细节。
3 自定义字典
WPF包含一个拼写检查器,在WPF 4之前,只使用OS提供的字典做输入验证之用。这对面向使用专用术语的特定行业的应用来说一直是个大问题,因为这些应用一直为拼写错误报告所困扰。 WPF 4引进了一个API,允许应用程序往WPF用来检查拼写的字典中添加词汇。这里有更多细节。
4 选择画刷和插入符光标画刷
为允许对WPF应用的观感(look and feel)做丰富的定制,开发人员现在还可以通过这2个简单的属性来改变用于绘制WPF文字选择和插入符光标(caret)的画刷:SelectionBrush 和 CaretBrush:
图7 选择画刷和插入符光标画刷
WINDOWS 7 光芒四射
1 Windows 7的多点触摸(Multitouch)支持
随着多点触摸输入和操作处理支持的引进,WPF 4提供了一个极棒的方式,可在Windows 7中使你的客户端应用大放光彩。多指输入是通过WPF 4中现有的和新的输入事件来呈示的,也有新的操作和惯性(inertia)事件可为开发人员所用。新的特性包括:
* UIElement上的多点触摸操作,惯性(漫游(Pan),缩放(Zoom)和旋转(Rotate))事件
* UIElement, UIElement3D 和 ContentElement上的原始多点触摸事件(提起(Up), 移动(Move), 按下(Down))
* 多个捕捉支持多个活动控件
* 支持多点触摸漫游的ScrollViewer增强
* 触摸设备的扩展性
* 将来Surface SDK的兼容性
图8 Windows 7的多点触摸(Multitouch)支持
2 Windows 7 Shell集成
WPF 4还向WPF开发人员呈示了若干个关键的Windows 7 新Shell特性。这些Shell特性能促成更丰富的集成用户体验。新的任务栏没那么拥挤了,一眼看去就能传达更多的信息。Aero缩略图支持用户命令。 跳转列表(Jump list)给应用程序提供了对与上下文相关的启动任务和文件的访问。
WPF 4 集成了Windows 7 跳转列表(Jump List)的功能,包括:
* 任务
* 个项(Items)
* 最近访问和经常访问列表集成
* 自定义分类
Windows 7 任务栏集成,包括:
* 进度条
* 叠加图标(Overlay Icon )
* 支持命令的缩略图按钮
* 描述文字的DWM缩略图裁剪
在Windows 7中,任务栏被重新设计,变得不那么拥挤了,以帮助用户使用较少的点击数来操作任务。WPF 4在XAML中提供了与Windows 7 任务栏的集成,允许应用程序使用图标叠加,进度条,缩略图工具条,缩略图描述文字以及缩略图裁剪, 通过应用的任务栏图标向用户披露有用的信息。
WPF 4 中还有一个新的TaskbarItemInfo类,呈示为一个依赖属性。它包含了Windows 7中引进的所有的新任务栏特性。
图9 Windows 7 Shell集成
3 图标叠加(Icon Overlays)
图标叠加允许一个应用程序通过在它的任务栏按钮的右下角显示一个小的叠加图标,向用户传达某些通知和状态。
图10 图标叠加(Icon Overlays)
4 进度条(Progress Bars)
任务栏按钮可以用来给用户显示简单的进度信息,而不必让用户转换到应用的窗口本身。进度条可以用来跟踪文件拷贝,下载,安装,媒介烧录,以及任何需要花一段时间的其他操作。
5 缩略图工具条(Thumbnail Toolbars)
缩略图工具条提供了对一个应用程序中关键命令的访问,而不必让用户复原或激活窗口。 这个特性允许应用程序的作者将一个活动工具条控件嵌入一个窗口的缩略图预览中。 应用程序可以根据它当前的状态的需要,显示,启用,禁止或隐藏缩略图工具条上的按钮:
图11 缩略图工具条(Thumbnail Toolbars)
WPF核心
1 新的XAML/BAML语法分析器(Parser)引擎
WPF 4用建立在新的System.Xaml.dll之上的新的引擎换掉了XamlReader.Load(), BAML 装载, 控件和 数据模板功能的实现。作为其中的一部分工作,我们修补了许多缺陷,做了很多功能方面的改进。XamlReader.Load()的用户可以利用 XAML2009中的若干新的语言特性,例如对泛型类型的支持。MarkupExtensions 和 TypeConverters 现在可以在对象图创建过程中得到更多的服务,能促成更多的场景,例如对Root对象的访问。通过使用System.Xaml.dll提供的许多新的底层 API,用于分析和操作XAML的工具也将更加容易创建。
2 DLR的数据绑定支持
与CLR中的类不同,动态对象的 成员是在运行时定义的。DynamicObject是.NET Framework 4中的一个新的抽象类,允许开发人员轻松地实现IDynamicMetaObjectProvider。随着C#中由“dynamic”关键词带来的新 DLR支持,我们预期一些类库的实现会转到使用DynamicObject 和 IDynamicMetaObjectProvider,将其作为一种标准的方式来呈示运行时定义的对象属性和成员。WPF 4对IDynamicMetaObjectProvider的数据绑定支持将允许使用自然属性句法来访问动态属性。
这个特性将扩展WPF数据绑定引擎,将现有的属性和索引器(indexer)数据绑定句法映射成对由IDynamicMetaObjectProvider提供的动态成员的访问的支持。
3 视觉状态管理器(VSM)
另一个支持WPF-Silverlight连续体的新特性是VisualStateManager(视觉状态管理器),引进了一种简单的新方式来将视觉 状态施加给控件。这个机制提供了一种方式,通过提供将控件逻辑映射到各自的起始和终止视觉状态的方法,可以轻易地定制控件的外观(look)和行为 (feel)。
图12 视觉状态管理器(VSM)
VSM是非常灵活的,在于它能自动地生成各别状态间的过渡性动画,这样,控件的作者可以花较少的时间在编写代码上,而花较多的时间在定义在控件模板中的 视觉状态上。那意味着,VSM可以给予控件作者轻松地互换控件的外观和行为的能力,VSM赋予了控件作者一种方式,可以轻易地互换控件在视觉上是如何响应 用户的交互的。这是被Expression Blend完全支持的。
4 HTML-XBAP 脚本互操作
WPF 4提供了XBAP和宿主HTML网页(XBAP在其中是在一个HTML帧或IFRAME元素中装载的)中的脚本间的直接通讯手段。XBAP可以深入访问HTML DOM,包括对内嵌在HTML网页中的任何ActiveX控件的访问,以及对DOM事件的处理。
WPF呈示宿主帧的主要脚本对象,这是一个动态对象,代表了帧的window对象加上HTML网页脚本中的任何自定义的脚本函数和全局变量。从这个主要 脚本对象,一个应用程序可以直接调用脚本函数或者 “点入(dot into)” HTML DOM对象【译注:因为是动态对象,你可以使用“对象1.属性对象2.方法”的句法,是谓“dot into”】。这个功能可在部分信任的XBAP中以及在Internet Explorer 和 Firefox的所有支持版本下使用。
5 UIAutomation(界面自动化))虚拟化
WPF在过去的版本中还引进了虚拟化的控件(virtualized controls),但从来没有提供一个标准化的方式让一个自动化客户端与一个虚拟化的控件作交互。WPF 4中加了两个控件模式,ItemsContainerPattern 和VirtualizedItemPattern,来支持对虚拟化了的元素的访问和交互。ItemsContainerPattern可用来访问虚拟化的 控件以及找到虚拟化的个项(item),而VirtualizedItemPattern则可用于实现虚拟化的个项。
6 SynchronizedInput模式
这是WPF 4中新加的另一个UIA(界面自动化)控件模式,这个模式可为自动化客户端用来跟踪某个输入事件是否被WPF框架导向到了正确的元素之上。这个模式有3个 相关的自动化事件,即,InputReachedTargetEvent, InputReachedOtherElementEvent 和 InputDiscardedEvent,来表示输入是在何处处理的。
客户端部署
1 .NET Framework 4 的 Client Profile
为改进.NET Framework 4部署的大小,时间和总的体验,现在提供了一个更精简的 .NET 版本,是完整的.NET Framework 4 的一个子集,叫做.NET Framework 4 Client Profile。.NET Framework 4 Client Profile目前可重分发的大小是30MB左右,完整的Microsoft .NET Framework 4是Client Profile的纯超集(superset)。
.NET Framework 4 Client Profile的目的是改进和帮助精简客户端应用的部署大小,部署时间,可靠性和总的部署体验。Client Profile包含了大多数常见桌面客户端应用(包括Windows Forms 和 WPF 应用)所需的功能,预期大多数客户端应用的开发人员将会针对这个Client Profile,而不是完整的.NET Framework 4做开发。因为这个原因,大多数Visual Studio 2010 Beta 2 客户端项目模板默认针对的是 .NET Framework 4 Beta 2 Client Profile。
与.NET Framework 3.5 SP1 Client Profile有所不同,.NET Framework 4 Client Profile中的一个重要增强是其对所有平台和
操作系统
的支持,包括那些完整的框架所支持的操作系统,象Windows Vista, Windows XP, Windows Servers 2003 和 2008, Windows 7 (所有操作系统同时支持x86和x64版本)。
你可以查看或改变你针对的框架版本,打开你的项目的属性窗口,然后选择 "Application"页面,然后你可以改变“Target framework(针对的框架)”下拉框为完整的 .NET Framework或者.NET Client Profile。项目的“Publish”属性页面也允许你选择ClickOnce部署所需的必备
软件
(prerequisite)。 在Beta2中,VS 2010会根据你项目的主要针对目标自动选择正确的profile(Client Profile版本或者完整版本):
图13 .NET Framework 4 的 Client Profile
上面同样的必备软件对话框会在你创建“安装和部署”项目(在菜单“添加新的项目”/“其他项目类型”下)时出现,NET4 Client Profile必备软件项在这个情形下是默认选择了的。
2 与NET 3.5 SP1 Client Profile相比,NET4 Client Profile中的增强
尽管“Client Profile”的概念并不新,是在.NET Framework 3.5 SP1中引进的,但.NET Framework 4 Client Profile包含了若干重要的改进:
|
.NET Framework 4 Client Profile (新)
|
.NET Framework 3.5 SP1 Client Profile
|
所支持的
操作系统
|
支持所有为完整的.NET Framework所支持的平台和操作系统(除IA64 和W2K8中的
服务器
核心角色外)
|
只支持没有安装任何.NET Framework版本的Windows XP 32-bit机器
(否则Client Profile安装程序会悄悄地安装完整的3.5 SP1框架)
|
重分发
|
支持重分发以及web下载
|
只支持web下载
|
添加/删除程序项
|
完整的框架包括了 Client Profile 和另一个叫“扩展的(Extended)”部分,因此它在添加/删除程序对话框(或者程序和特性窗口)中有2个项。
如果你安装了完整的框架,你只要删除“添加/删除程序”列表中的“扩展”项,就可以转到Client Profile。
|
“添加/删除程序”列表中只有一项
|
Visual Studio
|
Visual Studio 2010中对针对的Client Profile改进了的支持
在默认情形下,许多 Visual Studio 2010 Beta2客户端项目将针对NET4 Client Profile
|
.NET Framework 3.5项目的Visual Studio 2008 Service Pack 1 “Application”项目属性页上的一个复选框。原本VS 2008没有Client Profile支持。
|
特性
|
包括新的.NET 4特性(例如 托管扩展性框架(Managed Extensibility Framework) (MEF), C# 4 dynamic 关键词等等),以及以前包括在NET 3.5 SP1 完整版本中的特性(语音,WPF 拼写检查等等)
|
.NET 3.5 SP1 完整版本的特性子集
|
因为.NET 4.0是个可与.NET Framework以前的版本并列安装的版本,.NET 4.0 Framework的安装并不要求对机器上的先前.NET版本进行服务或打补丁,这意味着.NET 4.0 Client Profile,比之于.NET 3.5 SP1 Client Profile,在机器上安装起来会快很多。
3 完全信任的XBAP部署
从WPF 4开始,企业网域(Intranet Zone)和可信任域(Trusted Zone)中的XAML浏览器应用(XBAP)也启用了ClickOnce的权限升高提示,方便了完全信任的XBAP的部署。针对那些需要
安全
权限超过企业网域(Intranet Zone)和可信任域(Trusted Zone)所提供的最低代码访问安全(CAS)权限集的XBAP,用户在浏览到这些XBAP时,能够在ClickOnce权限升高提示中点击"运行"按钮,以允许XBAP以所要求的权限运行。
结束语
你可以从上面看得出来,WPF 4.0中有一堆很棒的新功能。下面是几个你可以去看一下的链接和资源,来进一步了解其中一些特性:
Channel 9: Chipalo Street 解释 WPF 4文本方面新的和改进的功能
Chipalo 还有一系列很深入的贴子,讨论WPF 4中新的文本堆栈方面的改进
Channel 9: David Teitlebau讲解WPF 4图形基础
Channel 9: Jossef Goldberg 深入讲解.NET Framework 4中Client Profile中的新特性
Jossef 还有几篇很详细的贴子, 介绍.NET 4中的Client Profile 以及 .NET 4 Beta 2中 Client Profile中的新特性
Channel 9: Mark Wilson-Thomas 示范Visual Studio 2010 WPF 和 Silverlight 设计器中的新特性
以及Windows Client.net方面的动手实验室和录像
Jaime Rodriguez着重介绍WPF 4中的一些重要的新特性和Visual Studio 2010 Beta 2中的WPF设计器
在接下来的几个月里,我将撰写更多的贴子,着重介绍一些WPF 4的新功能以及如何利用它们。我不久还将撰写一个贴子讨论新的VS 2010 WPF 和 Silverlight设计器,这使得直接在Visual Studio 2010中使用一个可见即可得(WYSIWYG)设计器来打造精美的WPF 和 Silverlight应用成为可能。
希望本文对你有所帮助,
Scott