Windows_Presentation_Foundation

**W**indows **P**resentation **F**oundation（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 的排版會錯誤