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) として配置することもできる。

相互運用性

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

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

マルチメディア

  • WPFはブラシ、ペン、幾何図形、変形などの基本的な2Dグラフィックス機能を提供する。
  • WPFで提供される3D機能はDirect3Dのサブセットである。しかし、WPFではよりユーザインタフェースなどの要素に密接に利用することができる。これによって3DのUI、文書、メディアなどが可能になる。
  • 一般的なラスター画像フォーマットをサポートする。
  • WMVMPEGAVIフォーマットの動画をサポートする。
  • 時間ベースのアニメーションをサポートする。これはシステムのパフォーマンスに依存せずアニメーションのスピードを一定に保つ。
  • 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) アプリケーションも基本は同様である。

関連項目

脚注

[脚注の使い方]
  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
アーキテクチャ
共通言語基盤
言語
関連技術
その他のCLI実装
組織
開発環境
カテゴリ カテゴリ
低レベル
高レベル
AmigaOS対応
  • BOOPSI(英語版)
  • Magic User Interface(英語版)
  • ReAction GUI(英語版)
  • Zune(英語版)
Mac OS/macOS対応
  • Cocoa (API)
  • MacApp(英語版)
  • MacZoop(英語版)
  • PowerPlant(英語版)
Windows対応
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
Flash
Java
デスクトップ
ウェブ
JavaScript
Common Lisp
Object Pascal
Perl
  • WxPerl(英語版)
  • Perl/Tk
PHP
  • PHP-GTK(英語版)
  • PHP-Qt(英語版)
  • WxPHP(英語版)
Python
Ruby
  • Shoes
  • QtRuby(英語版)
XML
  • Ample SDK(英語版)
  • CougarXML(英語版)
  • GladeXML
  • Lively Kernel(英語版)
  • Pyjamas(英語版)
  • Rialto Toolkit(英語版)
  • XAML
  • XML User Interface(英語版)
  • XUL
  • Wt(英語版)
  • 一覧記事一覧(英語版)
  • カテゴリカテゴリ
マイクロソフトのAPIとフレームワーク
グラフィック
オーディオ
マルチメディア
ウェブ
データアクセス
ネットワーク
コミュニケーション
管理
コンポーネントモデル
ライブラリ
デバイスドライバ
セキュリティ
.NET
ソフトウェアファクトリー
  • EFx Factory
  • Enterprise Library
  • Composite UI
  • CCF
  • CSF
IPC
アクセシビリティ
テキストと多言語
サポート
  • 一覧
  • カテゴリ:マイクロソフトのAPI