Windows Presentation Foundation

Windows Presentation Foundation (WPF) はマイクロソフトが開発した、.NET Framework 3.0以降に含まれるユーザインタフェースサブシステムである。開発時のコードネームはAvalonであった[1][2]。

## 概要[編集]

WPFは、ユーザインタフェースとロジックを明確に区別する一貫したプログラミングモデルを提供する。 WPFアプリケーションはデスクトップで実行するだけでなくウェブブラウザ上で配置・実行することもできる（ただし類似技術のSilverlightとは違い、Windowsのみがターゲット環境となる）。 WPFによって、ユーザインタフェース、2Dおよび3Dオブジェクトの描画、ベクトルグラフィックス、ラスターグラフィックス、アニメーション、音声および動画の再生などといった表現手法を統一的に利用することができる。WPF以前のWindowsアプリケーション開発では、それらを実現するためにはGDI/GDI+、DirectX Graphics (Direct3D他)、DirectX Audio (DirectSound他)[3][4]、WindowsマルチメディアAPI、DirectShowといった個別のWindows APIを使って実装しなければならなかった。

.NET Framework 3.0はWindows Vistaにプリインストールされており、Windows XP SP2およびWindows Server 2003でも利用できる。また、Windows 7には.NET Framework 3.5 SP1がプリインストールされている。WPFのバージョン番号は、それが含まれる.NET Frameworkのバージョンと同列に扱われることが多い。例えば.NET 3.0上で動作するものはWPF 3.0、.NET 3.5/3.5 SP1で機能拡張されたものはWPF 3.5、そして.NET 4で機能拡張されたものはWPF 4といった具合である。 なお、Windows 8には.NET 4.5が、Windows 8.1には.NET 4.5.1が、Windows 10には.NET 4.6が、そしてWindows 11には.NET 4.8がプリインストールされており、WPF 4.5以降を標準的に利用できるが、逆に.NET 3.5以前のコンポーネントは標準で有効になっていないため、WPF 3.0/3.5アプリケーションを動作させるためには明示的なインストールが必要である[5]。

## 特徴[編集]

次に示すのはWPFの特徴の一部である。

### グラフィックス[編集]

全てのグラフィックスはDirect3Dを介して描画される。 また、可能であればGPUによるハードウェアアクセラレーションが使用される。 これにより、高速かつ高度なグラフィックを統一されたインタフェースで実現・利用することができる。

* Direct3Dを通して描画することにより、グラフィックスハードウェア上のGPUに描画処理の一部を任せることが可能になる。これは（GDI/GDI+で問題となっていた）CPUの負荷を軽減することにつながる。
* ベクトルグラフィックスをサポートする。これは損失のない拡大縮小を可能にする。
* 3Dモデルのレンダリングや相互作用をサポートする。`Viewport3D`のようなWPFフレームワーク自体に組み込まれた機能のほか、`D3DImage`のようなDirect3D相互運用性も備えている。
* 高DPI環境に標準対応している (System DPI Aware)[6]。Per-Monitor DPI Awareに関しては、.NET 4.6.2およびWindows 10 Anniversary Update以降の環境で利用可能である[7][8]。

#### Rendering Tier[編集]

WPFではグラフィックスハードウェア（グラフィックスカード/グラフィックスチップ）のDirectX (Direct3D) 対応レベルに応じて、GPUアクセラレーションの有無が決定される。

WPF 3.5までは下記のようになっている[9]。

* Rendering Tier 0: GPUアクセラレーションなし。DirectX 7.0未満。
* Rendering Tier 1: 一部GPUアクセラレーションあり。DirectX 7.0以上、DirectX 9.0未満。
* Rendering Tier 2: ほとんどの機能がGPUアクセラレーションを使う。DirectX 9.0以上（VRAM搭載量120MB以上、頂点シェーダー2.0以上など）。

一方、WPF 4以降は下記のように変更されている[10]。

* Rendering Tier 0: GPUアクセラレーションなし。DirectX 9.0未満。
* Rendering Tier 1: いくつかの機能はGPUアクセラレーションを使う。DirectX 9.0以上。
* Rendering Tier 2: ほとんどの機能がGPUアクセラレーションを使う。DirectX 9.0以上（VRAM搭載量120 MB以上、頂点シェーダー2.0以上など）。

### 印刷[編集]

WPFは標準でXPSフォーマット (XPS API) をサポートし、画面に表示されている`UIElement`ツリーをそのまま印刷に使用することができる (WYSIWYG)。なお、WPF同様に、画面描画をGPUアクセラレートする技術にDirect2Dが存在するが、Direct2D 1.0は印刷デバイスへの出力を直接サポートしないので、こちらはGDI/GDI+などを併用する必要がある。Direct2D 1.1ではメタデータ出力による印刷機能が追加されている。

### 配置[編集]

WPFは通常のスタンドアローンアプリケーションだけでなく、XAMLブラウザアプリケーション（英語版） (XBAP) として配置することもできる。

* スタンドアローンアプリケーションはClickOnceやMicrosoft Windows Installer (MSI) などのインストーラによってローカルコンピュータ上に配置されるアプリケーションである。
* XAMLブラウザーアプリケーション (XBAP) はInternet Explorerなどのウェブブラウザによってホストされるアプリケーションである[11]。コンピュータリソースへのアクセスやWPFの機能は一部制限される。

### 相互運用性[編集]

* WPFはWin32（ネイティブコード）との相互運用機能を提供する。Win32のコード内からWPFを利用する（例：`HwndHost`クラスの合成、アセンブリのCOM公開など）ことも、WPFからWin32のコードを利用する（例：`HwndHost`クラスの継承、`D3DImage`クラスなど）ことも可能である。
* Windows Formsとの相互運用も可能である（`ElementHost`、`WindowsFormsHost`クラス）。

なお、WPFのUI上に配置されたWin32あるいはWindows FormsによるレガシーなUIコントロールの描画に対しては、GPUアクセラレーションが効かない（GDI/GDI+によって描画される）ので注意が必要である。

### マルチメディア[編集]

* WPFはブラシ、ペン、幾何図形、変形などの基本的な2Dグラフィックス機能を提供する。
* WPFで提供される3D機能はDirect3Dのサブセットである。しかし、WPFではよりユーザインタフェースなどの要素に密接に利用することができる。これによって3DのUI、文書、メディアなどが可能になる。
* 一般的なラスター画像フォーマットをサポートする。
* WMV、MPEG、AVIフォーマットの動画をサポートする。
* 時間ベースのアニメーションをサポートする。これはシステムのパフォーマンスに依存せずアニメーションのスピードを一定に保つ。
* ClearTypeを利用したテキストレンダリングをサポートする。また、OpenTypeフォントの機能もサポートする。WPF 4以降はDirectWriteコンポーネントとの統合が図られており、縦方向のClearTypeアンチエイリアスが有効となる。

### データバインディング[編集]

WPFは次に示す3種類のデータバインディングをサポートする。

* one time: クライアントはサーバ上のアップデートを無視する。
* one way: クライアントはデータに対して書込み禁止の権限をもつ。
* two way: クライアントは読み込みと書き込み両方の権限をもつ。

### ユーザインタフェース (UI)[編集]

WPFのUIはXAMLと呼ばれるXMLベースのマークアップ言語で記述され、対応するイベントハンドラなどをC#あるいはVB.NETなどの.NET系言語で記述することになる（コードビハインド（英語版））。これはWPFの強力な利点のひとつであり、ロジックとインターフェイスを完全に切り離すことができる。

* ボタン、メニュー、リストボックスなどといった基本的な組み込みコントロールが提供される。
* UI要素の機能拡張や外観のカスタマイズ（カスタムテンプレートの作成）が、Win32あるいはWindows Formsと比べて容易である。
* XAML拡張構文（Bindingマークアップ拡張[12]）を用いたデータバインディングにより、コードビハインドを記述することなくデータソースもしくはユーザインタフェース変更の反映や連動を実現することもできる。

なお、XAMLを使わずにC#、VB.NET、C++/CLIなどの.NET言語を使い、UIをコードベースで組み立てていくことも可能ではあるが、IDE搭載のXAMLエディターおよびXAMLデザイナーを利用してXAMLベースでUIを記述するほうが直感かつ効率的に階層構造を構築できる。

### 入力[編集]

WPFはマウスおよびキーボード入力をサポートするほか、`System.Windows.Controls.InkCanvas`により、スタイラスペンを使用した入力にも対応する[13]。WPF 4以降は、Windows Formsでは標準対応されていないWindowsタッチAPI（マルチタッチ）に対するラッパーを提供する[14]。

## 類似技術[編集]

XAMLファミリーとして、いくつかのWPF類似技術がマイクロソフトによって開発されている。

### Silverlight[編集]

SilverlightはマイクロソフトによってAdobe Flashの競合技術として開発された。Silverlightは主にブラウザ上での実行を想定しているのに対し、WPFはよりクライアントPC環境に密着したスタンドアローン向け技術である。また、Silverlightで使用される.NET Frameworkは基本的に.NET Compact Frameworkのような機能制限付きサブセットであるが、WPFで使用される.NET FrameworkはWindows PC環境向けのフルセットである点も異なる。

### Windowsストアアプリ[編集]

Windows 8/Windows RTにおいて導入されたWindowsストアアプリ（WinRTアプリ、Modern UIアプリケーション）はWPF同様XAMLによってユーザインタフェース要素を記述し、WPFに類似したプログラミングモデルを提供する。C#やVB.NETといったマネージ言語だけでなく、ネイティブ言語（C++）からも利用できることが特徴である。Windows 10においてWindowsストアアプリの後継として導入された、ユニバーサルWindowsプラットフォーム (Universal Windows Platform, UWP) アプリケーションも基本は同様である。

## 関連項目[編集]

* Microsoft Silverlight
* Microsoft Visual Studio \- 従来からWPFアプリケーションの統合開発環境であったが、Visual Studio 2010ではそれ自体がWPFで実装されるに至っている[15]。
* XAML
* Windowsランタイム
* Windows API
* .NET Framework
* MVVM

## 脚注[編集]

[脚注の使い方]

1. ^ “Beta Experience - Avalon”. 2016年5月29日時点のオリジナルよりアーカイブ。2016年4月17日閲覧。
2. ^ “WPF（Windows Presentation Foundation）＋XAML入門 前編 (1/4)：CodeZine（コードジン）”. 2016年4月17日閲覧。
3. ^ “DirectX 8.0 の紹介”. Microsoft Docs. 2015年3月11日閲覧。
4. ^ “オーディオのリファレンス”. Microsoft Docs. 2015年3月11日閲覧。
5. ^ “Windows 11、10、8.1、8 に .NET Framework 3.5 をインストールする - .NET Framework”. Microsoft Learn. 2022年12月10日閲覧。
6. ^ 田中達彦 (2014年7月24日). “アプリの高DPI(High DPI)対応について 第2回 ～ アプリケーションの高DPIへの対応レベル ～”. Microsoft Learn. MSDN Blogs. 2022年12月10日閲覧。
7. ^ “Announcing .NET Framework 4.6.2 | .NET Blog”. 2017年3月20日閲覧。
8. ^ “.NET Framework 4.6.2 を発表”. Microsoft Docs. 2017年3月20日閲覧。
9. ^ “Graphics Rendering Tiers”. Microsoft Docs. Docs Previous Versions / .NET / .NET Framework 3.5 / Windows Presentation Foundation / Application Development / Performance. 2015年8月8日閲覧。
10. ^ “Graphics Rendering Tiers”. Microsoft Docs. Docs Previous Versions / .NET / .NET Framework 4 / Windows Presentation Foundation / Application Development / Performance. 2015年8月8日閲覧。
11. ^ “Windows Presentation Foundation XAML ブラウザ アプリケーションの概要”. Microsoft Docs. 2016年4月17日閲覧。
12. ^ “バインディングのマークアップ拡張機能”. Microsoft Docs. 2015年3月11日閲覧。
13. ^ デジタル インクを収集する - WPF .NET Framework | Microsoft Docs
14. ^ チュートリアル: 初めてのタッチ アプリケーションの作成 - WPF .NET Framework | Microsoft Docs
15. ^ “WPF UIを使ったVisual Studio 2010のスクリーンショットが初披露”. InfoQ. 2015年3月12日閲覧。

## 外部リンク[編集]

* WPF とは - Visual Studio (Windows) | Microsoft Docs
* Windows Presentation Foundation | Microsoft Docs
* Windows Presentation Foundation ホーム[リンク切れ]
* Msdn フォーラム - Windows Presentation Foundation ( WPF )
* WPF Tutorial.net

* 表
* 話
* 編
* 歴

.NET Framework（カテゴリ）

アーキテクチャ|

* 共通言語基盤
* アセンブリ
* メタデータ
* 基本クラスライブラリ
* 仮想実行システム

共通言語基盤|

* 共通言語ランタイム
* 共通型システム
* 共通中間言語
* 動的言語ランタイム

言語|

* C#
* Visual Basic .NET
* C++/CLI （マネージ拡張）
* F#
* J#
* JScript .NET
* Windows PowerShell
* IronPython
* IronRuby
* Nemerle
* Boo
* Phalanger（PHPコンパイラ）

関連技術|

* WPF
* WCF
* WF
* WCS
* Windows Forms
* ASP.NET
* ADO.NET
* ASP.NET MVC Framework
* ClickOnce
* XAML
* Silverlight
* LINQ
* .NET Remoting
* MSBuild
* XSP

その他のCLI実装|

* シェアードソースCLI
* Mono
* Portable.NET
* .NET Core
* .NET Compact Framework
* Microsoft XNA

組織|

* .NET Foundation
* Xamarin

* 表
* 話
* 編
* 歴

ウィジェット・ツールキット

低レベル|

* Macintosh Toolbox（英語版）/Carbon (API)
* Intrinsics
* Intuition（英語版）
* Windows API
* Xlib
* XCB

高レベル|

| AmigaOS対応|

* BOOPSI（英語版）
* Magic User Interface（英語版）
* ReAction GUI（英語版）
* Zune（英語版）

|

Mac OS/macOS対応|

* Cocoa (API)
* MacApp（英語版）
* MacZoop（英語版）
* PowerPlant（英語版）

Windows対応|

* Microsoft Foundation Class Library
* Object Windows Library（英語版）
* Silverlight
* SmartWin++（英語版）
* Visual Component Library
* Windows Forms
* Windows Presentation Foundation
* Windows Template Library
* WinRT XAML（英語版）

X11下のUnix対応|

* Athena/Xaw（英語版）
* InterViews（英語版）
* LessTif
* Motif

言語別
クロスプラットフォーム|

| CLI|

* Gtk#
* Moonlight（英語版）
* Tao（英語版）

|

C/C++|

* CEGUI（英語版）
* Component Library for Cross Platform
* FLTK
* FOX toolkit（英語版）
* OpenGL User Interface Library（英語版）
* GTK
* Juce（英語版）
* Qt
* Wt（英語版）
* Tk
* TnFOX（英語版）
* Ultimate++（英語版）
* Visual Component Framework（英語版）
* wxWidgets
* YAAF（英語版）
* XForms
* XVT（英語版）

Objective-C|

* GNUstep

Flash|

* Apache Flex

Java|

| デスクトップ|

* Abstract Window Toolkit
* Swing
* Standard Widget Toolkit
* Qt Jambi（英語版）

|

ウェブ|

* Google Web Toolkit

JavaScript|

* Dojo Toolkit
* Echo（英語版）
* Ext JS
* Google Closure Tools
* jQuery
* jQuery UI
* MooTools
* Qooxdoo（英語版）
* script.aculo.us（英語版）
* YUI（英語版）

Common Lisp|

* CAPI
* Common Graphics
* CLIM（英語版）
* Ltk
* McCLIM（英語版）

Object Pascal|

* Component Library for Cross Platform
* fpGUI（英語版）
* IP Pascal（英語版）
* Lazarus

Perl|

* WxPerl（英語版）
* Perl/Tk

PHP|

* PHP-GTK（英語版）
* PHP-Qt（英語版）
* WxPHP（英語版）

Python|

* Pyjamas（英語版）
* PyQt
* PyGTK
* PyGObject（英語版）
* PySide
* Tkinter
* wxPython

Ruby|

* Shoes
* QtRuby（英語版）

XML|

* Ample SDK（英語版）
* CougarXML（英語版）
* GladeXML
* Lively Kernel（英語版）
* Pyjamas（英語版）
* Rialto Toolkit（英語版）
* XAML
* XML User Interface（英語版）
* XUL
* Wt（英語版）

* 一覧（英語版）
* カテゴリ

* 表
* 話
* 編
* 歴

マイクロソフトのAPIとフレームワーク

グラフィック|

* Desktop Window Manager
* Direct2D
* Direct3D (拡張)
* GDI / GDI+
* WPF
* Silverlight
* WinUI
* Windows Color System
* Windows Image Acquisition
* Windows Imaging Component

オーディオ|

* DirectMusic
* DirectSound
* DirectX plugin
* XACT
* Speech API

マルチメディア|

* DirectX (Media Objects
* Video Acceleration)
* DirectInput
* DirectPlay
* DirectShow
* Image Mastering API
* Managed DirectX
* Media Foundation
* XNA
* Windows Media
* Video for Windows

ウェブ|

* MSHTML
* EdgeHTML
* RSS Platform
* JScript
* VBScript
* BHO
* XDR
* SideBar Gadgets

データアクセス|

* Data Access Components
* Extensible Storage Engine
* ADO.NET
* ADO.NET Entity Framework
* Sync Framework
* Jet Engine
* MSXML
* OLE DB
* OPC

ネットワーク|

* Winsock (LSP)
* Winsock Kernel
* Filtering Platform
* Network Driver Interface Specification
* Windows Rally
* BITS
* P2P API
* MSMQ
* MS MPI

コミュニケーション|

* Messaging API
* Telephony API
* WCF

管理|

* Win32 console
* Windows Script Host
* WMI
* PowerShell
* Task Scheduler
* Offline Files
* Shadow Copy
* Windows Installer
* Error Reporting
* Event Log
* Common Log File System

コンポーネントモデル|

* COM
* COM+
* ActiveX
* Distributed Component Object Model
* .NET Framework

ライブラリ|

* Base Class Library (BCL)
* Microsoft Foundation Classes (MFC)
* Active Template Library (ATL)
* Windows Template Library (WTL)

デバイスドライバ|

* Windows Driver Model
* Windows Driver Foundation
* KMDF
* UMDF
* WDDM
* NDIS
* UAA
* Broadcast Driver Architecture
* VxD

セキュリティ|

* Crypto API (CAPICOM)
* Windows CardSpace
* Data Protection API
* Security Support Provider Interface (SSPI)

.NET|

* ASP.NET
* ADO.NET
* Base Class Library (BCL)
* Remoting
* Silverlight
* TPL
* WCF
* WCS
* WPF
* WF

ソフトウェアファクトリー|

* EFx Factory
* Enterprise Library
* Composite UI
* CCF
* CSF

IPC|

* MSRPC
* Dynamic Data Exchange (DDE)
* Remoting
* WCF

アクセシビリティ|

* Active Accessibility
* UI Automation

テキストと多言語
サポート

* DirectWrite
* Text Services Framework
* Text Object Model
* Input method editor
* Language Interface Pack
* Multilingual User Interface
* Uniscribe

* 一覧
* カテゴリ:マイクロソフトのAPI