Windows Presentation Foundation（WPF）是美國微軟公司推出.NET Framework 3.0 及以後版本的組成部分之一，它是一套基於 XML、.NET Framework、向量繪圖技術的展示層開發框架，微軟視其為下一代使用者介面技術，廣泛被用於 Windows Vista 的介面開發。其早期開發階段的代號為「Avalon」。

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 程式碼。

* 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

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



WPF 應用程式

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


* Microsoft Visual Studio 2010

* Microsoft Expression Design

* Microsoft Expression Blend

* Yahoo! Messenger

* New York Times Reader

* Blu

* 騰訊 QQ 概念版（只能在 Windows 7 上使用）



發行歷史

 



參考資料



外部連結


* - .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 的排版會錯誤