Windows Presentation Foundation

Windows Presentation FoundationWPF)是美国微软公司推出.NET Framework 3.0及以后版本的组成部分之一,它是一套基于XML.NET Framework向量绘图技术的展示层开发框架,微软视其为下一代用户界面技术,广泛被用于Windows Vista的界面开发。其早期开发阶段的代号为“Avalon[1]

WPF使用一种新的XAML(eXtensible Application Markup Language)语言来开发界面。同时WPF自带MVVM(Model-ViewModel-View)框架,这种设计模式将把界面开发以及后台逻辑很好的分开,降低了耦合度,使用户界面设计师与程序开发者能更好的合作,降低维护和更新的成本。

WPF/E是WPF的子集合,全名是:Windows Presentation Foundation Everywhere。在基于XAML与JavaScript之下,可跨越各种平台,目前WPF/E已演化为Microsoft Silverlight,担负微软在丰富互联网应用程序领域,并正面与Adobe Flash竞争的产品。

特征 编辑

WPF部分之特征如下:

绘图服务 编辑

  • 所有的图形皆可由Direct3D产生。
    • 目标在于统一各种显示图形。
    • Windows可以透过Direct3D来减轻在绘图任务上的负荷,这项技术乃基于电脑显卡绘图处理单元(Graphics Processing Unit)。
    • 支持向量绘图(vector graphic)。
    • 支持3D透视图并且影响2D应用程序。

布署 编辑

  • WPF不仅仅是建立传统的独立程序(standalone applications)。其部署方式可分成两类:standalone与XAML Browser Applications(XBAP)观点。这些布署方式在程序的撰写上大致类似。
    • 独立程序之安装方式可以借由ClickOnce微软安装器(MSI)完成。独立程序可被视为完全信任(full trust)具有完全访问系统资源的优点。
    • XAML Browser Application(XBAPs)是一种寄宿于网页浏览器上的程序,像是Internet Explorer。寄宿的程序可获取部分信任(partial trust)的沙箱(sandbox)环境之下,且无法获取完整的系统资源,WPF的功能亦无法完全发挥。寄宿的环境必须有意地防卫恶意的代码。从网页上执行XBAP(读音"ex-bap")必须是毫无破绽的(没有安全性或安装提示)。虽然这样的寄宿程序在感观上与传统微软的DLL(out of process)有相异处。

互操作性 编辑

  • WPF可与Win32互相操作:经由主导(hosting)机制,可以在Win32码之下使用Windows Presentation Foundation,或是在Windows Presentation Foundation环境下使用Win32代码[2]
  • Windows Forms的互操作性亦可利用ElementHost(继承自System.Windows.Forms.ContainerControl)以及WindowsFormsHost(继承自System.Windows.Forms.Integration)等类别达成,同时提供了Host Avalon Element的能力。

媒体播放 编辑

  • WPF针对2D图形提供形状基元(shape primitives),内置笔刷(brushes)、画笔(pens)、几何(geometries),与变形(transforms)。
  • WPF以Direct3D提供完整的3D功能。但是,WPF提供更完整的集成性在于用户界面上(UI)、文件(documents),与媒体(media)。这使得尽可以实现3D UI, 3D文件,和3D媒体。
  • 支持了大量的图帧式(image formats)。
  • WPF支持大量影音格式,如:WMVMPEG以及某些AVI档。
  • WPF支持以时间为基础的动画效果,不同于以帧为基础的处理方式。如此动画的速度与系统性能就不会有所关连。
  • 文件的呈现支持ClearType,这提供一种次像素(sub-pixel)定位功能,强化其自然风格。WPF同时支持OpenType字体样式。

数据绑定 编辑

数据绑定是在应用 UI 与其显示的数据之间建立连接的过程。 如果绑定具有正确的设置,并且数据提供适当的通知,则在数据更改其值时,绑定到该数据的元素会自动反映更改。 数据绑定还意味着,如果元素中数据的外部表示形式发生更改,则基础数据可以自动进行更新以反映更改。 例如,如果用户编辑 TextBox 元素中的值,则基础数据值会自动更新以反映该更改。

数据绑定的典型用法是将服务器或本地配置数据放置到窗体或其他 UI 控件中。 此概念在 WPF 中得到扩展,包括将大量属性绑定到不同类型的数据源。 在 WPF 中,元素的依赖属性可以绑定到 .NET 对象(包括 ADO.NET 对象或与 Web 服务和 Web 属性关联的对象)和 XML 数据。数据绑定的方式一共有四种:

  • 通过 OneWay 绑定,对源属性的更改会自动更新目标属性,但对目标属性的更改不会传播回源属性。 如果绑定的控件为隐式只读,则此类型的绑定适用。 例如,可能会绑定到股票行情自动收录器这样的源,也可能目标属性没有用于进行更改的控件接口(例如表的数据绑定背景色)。 如果无需监视目标属性的更改,则使用 OneWay 绑定模式可避免 TwoWay 绑定模式的系统开销。
  • 通过 TwoWay 绑定,更改源属性或目标属性时会自动更新另一方。 此类型的绑定适用于可编辑窗体或其他完全交互式 UI 方案。 大多数属性默认为 OneWay 绑定,但某些依赖属性(通常为用户可编辑控件的属性,例如 TextBox.Text 和 CheckBox.IsChecked)默认为 TwoWay 绑定。 用于确定依赖属性绑定在默认情况下是单向还是双向的编程方法是:使用 DependencyProperty.GetMetadata 获取属性元数据,然后检查 FrameworkPropertyMetadata.BindsTwoWayByDefault 属性的布尔值。
  • OneWayToSource 绑定与 OneWay 绑定相反;当目标属性更改时,它会更新源属性。 一个示例方案是只需要从 UI 重新计算源值的情况。
  • OneTime 绑定未在图中显示,该绑定会使源属性初始化目标属性,但不传播后续更改。 如果数据上下文发生更改,或者数据上下文中的对象发生更改,则更改不会在目标属性中反映。 如果适合使用当前状态的快照或数据实际为静态数据,则此类型的绑定适合。 如果你想使用源属性中的某个值来初始化目标属性,且提前不知道数据上下文,则此类型的绑定也有用。 此模式实质上是 OneWay 绑定的一种简化形式,它在源值不更改的情况下提供更好的性能

数据绑定在展示层并无太大负担。WPF提供有数据模板(data templates)来控制这些数据。

用户界面 编辑

  • WPF提供了内置组件控件集合,包括有按钮(button)、菜单(menu)、列表盒(list box)等。
  • WPF的逻辑层与外观展示层已形成强力的分离模式。
    • 组件的外貌样品可以被完全改写。

文件 编辑

对OpenType的支持包括:

工具 编辑

在以往Win32应用程序发展时,绝大多数的工作都由开发人员(Developer)来处理,美术设计人员(Designer)可以涉入的相当有限,而且在Win32 API时代,要在用户界面中实现特效的话,都需要撰写大量的代码才可以做到。

在WPF中,因为大多数的用户界面元素都可以利用XAML来宣告,因此微软试着要将Designer和Developer结合在一起,如此可以让Designer可以充份发挥,并且Developer也不用伤脑筋在外观设计上,微软的Designer工具为Microsoft Expression产品集,其中的Expression Blend即为设计WPF应用程序的设计工具,它也可以用来设计Silverlight程序。

开发人员仍然可以使用Visual Studio来开发WPF应用程序,在Visual Studio中内含WPF Designer可供开发人员使用。

WPF/E 编辑

WPF/E发展初期为微软项目将WPF推向各平台的项目,目前此项目已经被发展成为Silverlight技术。

WPF应用程序 编辑

WPF是下一代图形API在桌面上的延伸。以WPF撰写应用程序,具有更高的视觉质量。下表列出微软自家的产品或是第三协力厂商的主力产品:

发行历史 编辑

系列 版本 发布日期 重要变更/事项 一同发布的产品
3 3.0 2006年11月 - -
3.5 2007年11月 - -
3.5 SP1 2008年8月 - -
4 4.0 2010年4月 - -
4.5 2012年8月 - -
4.5.1 2013年10月 - -
4.52 2014年5月 - -
4.6 2015年7月 高清晰度 (High Dots Per Inch; HDPI) 改善;触控行为焦点 (Touch) 改善;程序子视窗透明 (Transparent child window) 支持 Visual Studio 2015


参考资料 编辑

  1. ^ Gharighi, A. WPF ("Avalon") Demo 1. CodeProject.com. CodeProject. 2006-05-02 [2013-08-22]. (原始内容存档于2021-07-16). 
  2. ^ WPF and Win32 Interoperation Overview. [2007-04-03]. (原始内容存档于2008-02-06). 
  3. ^ QQ实验室. [2012-06-16]. (原始内容存档于2022-04-18). 

外部链接 编辑