Windows Presentation Foundation

本條目存在以下問題，請協助改善本條目或在討論頁針對議題發表看法。

| 此條目需要編修，以確保文法、用詞、语气、格式、標點等使用恰当。 (2020年10月20日)
請按照校對指引，幫助编辑這個條目。（幫助、討論）

|

| 此條目使用外部链接的方式可能不符合维基百科的方针或指引，或致使內文成為链接農場。 (2020年10月20日)
請協助清理過度與不適當的外部連結，并将有用的链接移到参考文献中。详情请参见条目的讨论页。

|

| 此條目需要补充更多来源。 (2020年10月20日)
请协助補充多方面可靠来源以改善这篇条目，无法查证的内容可能會因為异议提出而被移除。
致使用者：请搜索一下条目的标题（来源搜索："Windows Presentation Foundation" -- 网页、新闻、书籍、学术、图像），以检查网络上是否存在该主题的更多可靠来源（判定指引）。

|

| 此條目翻譯品質不佳。 (2020年10月20日)
翻譯者可能不熟悉中文或原文語言，也可能使用了機器翻譯。請協助翻譯本條目或重新編寫，并注意避免翻译腔的问题。明顯拙劣的翻譯請改掛`{{d|G13}}`提交刪除。

|

| 此條目的引用需要进行清理，使其符合格式。 (2020年10月20日)
参考文献应符合正确的引用、脚注及外部链接格式。

|

Windows Presentation Foundation（WPF）是美國微軟公司推出.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支援大量影音格式，如：WMV，MPEG以及某些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的支援包括：

* 合字（Ligatures）
* 舊式數碼（Old-style numerals，for example, parts of the glyph hang below the text baseline）
* 花体字（Swash）
* 分數形式（Fractions）
* 上标及下标
* 小型大写字母

## 工具[编辑]

在以往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[编辑]

主条目：Silverlight

WPF/E發展初期為微軟計畫將WPF推向各平台的計畫，目前此計畫已經被發展成為Silverlight技術。

## WPF應用程式[编辑]

WPF是下一代圖形API在桌面上的延伸。以WPF撰寫應用程式，具有更高的視覺品質。下表列出微軟自家的產品或是第三協力廠商的主力產品：

主条目：List of WPF applications

* Microsoft Visual Studio 2010
* Microsoft Expression Design
* Microsoft Expression Blend
* Yahoo! Messenger
* New York Times Reader
* Blu
* 腾讯QQ概念版（只能在Windows 7上使用）[3]

## 發行歷史[编辑]

系列  | 版本  | 發佈日期  | 重要變更／事項  | 一同發佈的產品

|
|
|
|

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）.

## 外部链接[编辑]

* \- .Net Framework 3.0官方社区（英文）
* The Windows Presentation Foundation community portal—The WPF section of the .NET Framework 3.0 community site.
* MSDN Windows Presentation Foundation SDK （页面存档备份，存于互联网档案馆）—Software Development Kit for WPF.
* WPFwiki.org （页面存档备份，存于互联网档案馆）—The largest WPF FAQ question and answer repository & Wiki.
* Getting Started (WPF) （页面存档备份，存于互联网档案馆）—Roadmap to information for developers new to WPF.
* WPF SDK Blog （页面存档备份，存于互联网档案馆）—Active blog maintained by the WPF SDK team.
* Windows Presentation Foundation Unleashed—The first WPF book to market, written by the lead developers Adam Nathan （页面存档备份，存于互联网档案馆）。
* Essential Windows Presentation Foundation （页面存档备份，存于互联网档案馆）—An online WPF tutorial and reference, written by Chris Anderson。
* Microsoft Expression Blend （页面存档备份，存于互联网档案馆）—Visual tool for creating Windows Presentation Foundation applications.
* wpf made simple （页面存档备份，存于互联网档案馆）—Provides info/samples on WPF.
* XAML.net （页面存档备份，存于互联网档案馆） Information on XAML and XBAPs, the Windows Presentation Foundation (WPF), .NET Framework 3.0 and Windows Vista]]。
* A Guided Tour of Windows Presentation Foundation—Microsoft's overview of Windows Presentation Foundation.
* Windows Presentation Foundation Security Sandbox—An overview of the sandbox in which WPF browser applications run.
* MSDN Forums for Windows Presentation Foundation—Active discussion forum for WPF developers.
* WPF/E Google Group （页面存档备份，存于互联网档案馆）—Discussion group and list of examples.
* Microsoft goes cross-platform with WPF/E—WPF/E explained in an interview with Microsoft's Director of Developer Tools.
* More than meets the eye in Microsoft's plans—News.com's article on WPF/E
* WPF page on NetFXGuide.com
* A Five Mile Overview of WPF—A high-level overview of WPF for software developers.
* xbap.org （页面存档备份，存于互联网档案馆）—Comprehensive information on XBAP applications.
* DirectX 10 Wiki \- Wiki covering WPF and DirectX 10 Tutorials, Samples, Effect, News.
* 我用43吋螢幕 各種排版錯誤 （页面存档备份，存于互联网档案馆） - 在高解析度下，WPF的排版會錯誤

* 查
* 论
* 编

.NET

实现|

* .NET(.NET CORE) 3
* .NET框架
* Mono
* Compact Framework
* Micro Framework
* Silverlight
* SSCLI
* DotGNU(Portable.NET)

架構|

* 基礎類別庫
* 共同語言執行期元件
* 程序碼存取安全性
* 組件
* 中介資料
* COM互通性
* .NET標準

共同語言基礎架構|

* 共同語言基礎架構（CLI）
* 共同型別系統
* 共同中介語言
* 虛擬執行系統

CLI支持語言|

共同語言1

* C#
* Visual Basic .NET
* C++/CLI（Managed）
* F#
* J#
* JScript .NET
* PowerShell

|

其他語言2

* Axum
* A#
* Boo
* Oxygene
* IronLisp
* IronPython
* IronRuby
* Nemerle
* Phalanger
* P#

Core家族3|

* ASP.NET Core (
* Entity Framework Core
* ASP.NET Core MVC )

元件|

* ADO.NET (Entity Framework
* Data Services)
* ASP.NET (AJAX
* Dynamic Data
* MVC
* Razor)
* ClickOnce
* 动态语言运行时
* LINQ
* MAUI
* Parallel FX Library (PLINQ
* TPL)
* WCF
* Windows Forms
* WPF
* Windows CardSpace
* WF（WWF）
* Remoting
* XAML

比較|

* C#与Java
* C#与Visual Basic .NET
* Java与.NET平台

即將推出|

* "Acropolis"
* "Jasper"

1微软在Visual Studio或.NET Framework中提供了或者将提供支持的语言
2被多數使用者使用，且非教學或研究型的語言。
3具有跨平台（Windows, Mac OSX, Linux）能力的開發框架。

* 查
* 论
* 编

微軟應用程序開發介面與框架

圖形介面|

* 桌面窗口管理器
* DirectX
* Direct2D
* Direct3D
* D3DX
* GDI / GDI+
* WPF
* Silverlight
* WinRT XAML（英语：Windows Runtime XAML Framework）
* Windows色彩系统
* Windows Image Acquisition（英语：Windows Image Acquisition）
* Windows Imaging Component（英语：Windows Imaging Component）
* DXGI
* Windows高级光栅化平台（WARP）
* WinG标准

音樂與音效|

* DirectMusic
* DirectSound
* DirectX插件（英语：DirectX plugin）
* 跨平台音频创作工具（XACT）
* Speech API（英语：Microsoft Speech API）
* XAudio2（英语：XAudio2）

多媒體|

* DirectX
* Media Objects
* DXVA
* Xinput
* DirectInput
* DirectShow
* Image Mastering API
* Managed DirectX（英语：Managed DirectX）
* Media Foundation
* XNA
* Windows Media
* Video for Windows

Web|

* MSHTML
* RSS平台（英语：Windows RSS Platform）
* JScript
* VBScript
* 瀏覽器協助工具物件
* XMLHTTP
* SideBar小工具
* TypeScript

資料存取|

* 資料存取元件集
* ADO
* ADO.NET
* Entity Framework
* ODBC
* OLE DB
* 可扩展存储引擎
* WCF Data Services
* 同步框架（英语：Microsoft Sync Framework）
* Jet資料庫引擎
* 微軟XML剖析器
* OPC

網路|

* Winsock
* LSP
* Winsock内核（英语：Windows Vista networking technologies#Winsock Kernel）
* Windows筛选平台
* 網路驅動程式介面規格（NDIS）
* Windows Rally
* 后台智能传输服务（BITS）
* 對等通訊API（英语：Windows Vista networking technologies#Peer-to-peer communication）
* MSMQ（英语：Microsoft Message Queuing）
* MS MPI（英语：Microsoft Messaging Passing Interface）
* DirectPlay
* Active Directory Service Interface

通訊|

* 訊息API（英语：Messaging Application Programming Interface）
* 電話API
* WCF

管理|

* Win32控制台
* Windows Script Host
* WMI
* PowerShell
* 工作排程器
* Offline Files（英语：Windows Vista I/O technologies#Offline Files）
* 磁碟區陰影複製服務
* Windows Installer
* Windows錯誤回報（英语：Windows Error Reporting）
* 事件記錄器
* 通用日志文件系统

元件與模型|

* COM
* COM+
* ActiveX
* DCOM
* .NET框架

函式庫|

* 框架类库
* MFC
* 活动模板库（ATL）
* WTL

驱动程序|

* WDM
* WDF
* KMDF
* UMDF
* WDDM
* NDIS
* UAA
* BDA（英语：Broadcast Driver Architecture）
* VxD

安全性|

* Crypto API
* CAPICOM
* Windows CardSpace
* 数据保护API
* 安全支持提供者接口（SSPI）

.NET|

* ASP.NET
* ASP.NET AJAX
* ADO.NET
* Remoting
* Silverlight
* 任务并行库（英语：Task Parallel Library）（TPL）
* WCF
* Windows CardSpace
* WPF
* WF
* Core家族
* .NET Core
* ASP.NET Core
* Entity Framework Core
* ASP.NET Core MVC

软件工廠|

* EFx Factory（英语：EFx Factory）
* Enterprise Library（英语：Microsoft Enterprise Library）
* 複合使用者介面（英语：Composite UI Application Block）
* CCF（英语：Microsoft Customer Care Framework）
* CSF（英语：Microsoft Connected Services Framework）

行程間通訊|

* MSRPC（英语：Microsoft RPC）
* 動態資料交換（DDE）
* Remoting
* WCF

可協助性|

* Active Accessibility（英语：Microsoft Active Accessibility）
* 使用者介面自動化（英语：Microsoft UI Automation）

文字與多語系支援|

* DirectWrite
* 文本服务框架（英语：Text Services Framework）
* 文本对象模型（英语：Text Object Model）
* 输入法编辑器
* 語言介面套件（英语：Language Interface Pack）
* 多語系使用者介面（英语：Multilingual User Interface）
* Uniscribe

遊戲開發|

* Direct3D
* D3DX
* DirectSound
* DirectInput
* DirectPlay
* DirectMusic
* Managed DirectX（英语：Managed DirectX）
* XNA

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板