Windows Presentation Foundation ( WPF ) は、Windowsベースのデスクトップ アプリケーション向けの無料のオープンソースユーザー インターフェイスフレームワークです。WPF アプリケーションは.NETをベースとしており、主にC#とXAML を使用して開発されます。[ 2 ]
元々はマイクロソフトによって開発されたWPFは、2006年に.NET Framework 3.0の一部として最初にリリースされました。2018年、マイクロソフトはWPFをMITライセンスの下でオープンソースとしてリリースしました。[ 3 ] WPFのデザインとレイアウト言語XAMLは、UWP、.NET MAUI、Avaloniaなど、他の多くのUIフレームワークに採用されています。
WPFは、XMLベースの言語であるXAMLを使用してさまざまなインターフェイス要素を定義してリンクし、C#を使用してプログラムの動作を定義します。[ 4 ] WPFアプリケーションは、スタンドアロンのデスクトッププログラムとして展開されます。
WPF は、2D/3D レンダリング、固定および適応型ドキュメント、タイポグラフィ、ベクターグラフィックス、ランタイムアニメーション、プリレンダリングされたメディアなど、多くの一般的なユーザー インターフェイス要素をサポートしています。これらの要素は、さまざまなイベント、ユーザー インタラクション、およびデータ バインディングに基づいてリンクおよび操作できます。[ 5 ]
WPF は、 Windows「Longhorn」の WinFX プログラミング モデルの一部として、「Avalon」というコードネームで開発されました。2004 年 8 月、マイクロソフトは WinFX のコンポーネントをWindows XPおよびWindows Server 2003にバックポートすると発表しました。[ 6 ]その後、これらのオペレーティングシステム向けの無料ダウンロードである .NET Framework 3.0 の一部としてリリースされました。[ 7 ] WPFランタイム ライブラリは、 Windows VistaおよびWindows Server 2008以降のすべてのバージョンのMicrosoft Windowsに含まれています。[ 8 ] [ 9 ]
2018 年 12 月 4 日に開催された Microsoft Connect イベントで、Microsoft はWPF をGitHub上のオープンソース プロジェクトとしてリリースすることを発表しました。MITライセンスの下でリリースされています。Windows Presentation Foundation は.NETソフトウェア フレームワークをターゲットとするプロジェクトで利用可能になりましたが、このシステムはクロス プラットフォームではなく、Windows でのみ利用可能です。[ 3 ] [ 10 ]
WPF では、画面やその他の UI 要素は、 XAMLファイルと、拡張子 . を持つ関連付けられたC#ファイル(「コードビハインド」と呼ばれることが多い)のペアを使用して定義されます.xaml.cs。XAML ファイルは、UI 要素のレイアウト、コンテンツ、その他のプロパティを宣言的に定義し、C# ファイルは、インタラクティブなコードエントリポイントを公開できるようにします。[ 4 ]
対話型の「Hello, World!」プログラムの基本的な例は、次のように作成できます。
MainWindow.xaml:
<Window x:Class= "WpfExample.MainWindow" xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" Title= "MainWindow" Height= "200" Width= "300" > <StackPanel Orientation= "Vertical" > <TextBlock Text= "お名前は何ですか?" /> <TextBox x:Name= "NameInputTextBox" /> <Button x:Name= "SubmitButton" Click= "SubmitButton_Click" > <TextBlock Text= "送信" /> </Button> <TextBlock x:Name= "ResultTextBlock" /> </StackPanel> </Window>MainWindow.xaml.cs:
System.Windowsを使用しています。namespace WpfExample { public partial class MainWindow : Window { public MainWindow () { InitializeComponent (); }private void SubmitButton_Click ( object sender , RoutedEventArgs e ) { string name = this.NameInputTextBox.Text ; this.ResultTextBlock.Text = $ " Hello { name } ! " ; } } }上記の例では、UI要素が組み込みクラスのサブクラスMainWindowとして宣言されています。XAMLファイルではレイアウトが定義されており、この例では、ユーザーへの指示を概説するテキストブロック、ユーザーが名前を入力するテキストボックス、送信ボタン、結果テキストブロックといったコントロールが縦に並んでいます。ボタンがクリックされると、ファイルで定義されているメソッドが呼び出されます。この関数は、最後のテキストブロックを更新し、ユーザーが入力した名前で挨拶するメッセージを表示します。WindowSubmitButton_Click.xaml.cs
WPF は、ベクター画像やラスター画像、オーディオ、ビデオなど、ほとんどの最新のメディアタイプをサポートし、2D レンダリングと 3D レンダリングの両方をサポートできます。[ 11 ]また、 HLSLピクセルシェーダーや、ぼかしやドロップシャドウなどの組み込み効果など、視覚要素にグラフィック効果を実装することもサポートしています。[ 12 ] [ 13 ]
WPFは主にベクターグラフィックスに依存しており、ほとんどのコントロールや要素は品質の低下やピクセル化なしに拡大縮小できます。[ 14 ] [ 15 ]
WPF はデータ バインディングを採用しています。これは、ユーザー インターフェイス要素とプログラムのオブジェクト モデル間で変更を伝播させる手法です。 [ 16 ]例えば、XAML で定義されたテキスト ブロックは、次のようにしてその内容を C# オブジェクトに格納されている文字列プロパティにバインドできます。
<TextBlock Text= "{Binding Username}" />public class ExampleViewModel { public string Username { get ; set ; } }これにより、テキストブロックにプロパティの値が表示されるようになりますUsername。
データバインディングの方向は構成可能で、UIからソースへの方向(テキストボックスに入力されたテキストがコード内のバインドされた文字列プロパティに伝播されるなど)、ソースからUIへの方向(コードに保存されている現在時刻を表示するように視覚的な時計が更新されるなど)、または双方向に定義できます。[ 16 ]
データバインディングには型に関する制限はなく、構造体、クラス、コレクションをバインドできます。コンバーターを使用すると、バインディング中に使用される値と型を変換できます。たとえば、テキストボックスをDateTimeプロパティにバインドしますが、コンバーターを使用して時刻をフォーマットされたローカライズされた日付文字列として表示します。[ 16 ]
組み込みコントロールのほとんどのプロパティはデータバインドが可能であり、カスタムコントロールは依存関係プロパティを定義することでバインド可能なプロパティを作成できます。[ 16 ] [ 17 ]
Microsoft が WPF 開発者向けに推奨しているアーキテクチャ パターンである MVVM は、データ バインディングに大きく依存しています。[ 18 ]
テンプレートとスタイルを使用することで、開発者はUI要素のビジュアルと構造を定義できます。
スタイルとは、単一のプロパティ属性を持つUI要素に適用できるプロパティ設定の組み合わせです。例えば、「青いラジオボタン」スタイルを作成し、プログラム全体で複数のラジオボタンコントロールに再利用することができます。スタイルはコントロールのプロパティの集合を変更できますが、構造的な大幅な変更を目的としたものではありません。
テンプレートは、WPF アプリケーションの一部に対して代替の UI を定義するためのメカニズムです。WPF にはさまざまなシナリオに対応するテンプレートの種類がいくつかありますが、それらはすべて UI 要素の内容、レイアウト、構造を定義するという共通の目的を持っています。[ 19 ]
WPFでは、多くのビジュアルプロパティをアニメーション化できます。これは、データバインディングが依存するのと同じ基盤システムである依存関係プロパティを通じて公開されます。WPFのアニメーションは、フレームベースではなく、時間ベースです。[ 20 ]
アニメーション クラスは、アニメーションするプロパティの .NET 型に基づいています。たとえば、要素の色を変更するには ColorAnimation クラスを使用し、要素の幅 (double 型)をアニメーションするには DoubleAnimation クラスを使用します。[ 20 ]
アニメーションはストーリーボードにグループ化することができ、ストーリーボードはアニメーションの開始、停止、一時停止、その他の操作を行うための主要な方法です。[ 20 ]
WPF はページ分割されたドキュメントをネイティブにサポートしています。DocumentViewer固定レイアウトのドキュメントを読み込むためのクラスが提供されています。このFlowDocumentReaderクラスは、ページ単位やスクロール可能などのさまざまな表示モードを提供し、表示領域のサイズが変更された場合にもテキストを再配置します。Open XML Paper SpecificationとOpen Packaging Conventions の両方をサポートしています。[ 21 ]
WPF には、 OpenType、TrueType、OpenType CFF ( Compact Font Format ) フォントなど、多数のテキスト レンダリング機能が含まれています。つまり、WPF は、合字、オールド スタイル数字、スワッシュバリアント、分数、上付き文字と下付き文字、スモール キャップ、ルビー文字、グリフ置換、複数のベースライン、カーニングなど、多数のテキスト機能をサポートできます。[ 22 ]
WPF はUnicodeのテキストを処理し、システムロケールなどのグローバル設定とは独立してテキストを処理します。さらに、フォント名とは独立して書き込み方向 (水平方向か垂直方向か) を処理できるようにフォールバック メカニズムが提供されています。単一言語フォントのグループを使用して複合フォントから国際フォントを構築したり、複合フォントを埋め込んだりできます。フォント リンクとフォント フォールバック情報は、複合フォント テクノロジーを使用してポータブル XML ファイルに格納されます。[ 23 ] XML ファイルの拡張子は.CompositeFontです。
WPF のテキスト エンジンは、組み込みのスペル チェックもサポートしています。また、自動行間隔調整、拡張された国際テキスト、言語ガイドによる改行、ハイフネーション、均等割り付け、ビットマップ効果、変換、影、ぼかし、グロー、回転などのテキスト効果といった機能もサポートしています。アニメーション テキストもサポートされており、これはアニメーション グリフだけでなく、テキストの位置、サイズ、色、不透明度のリアルタイム変更も指します。
WPF のテキスト レンダリングは、サブ ピクセル位置指定、自然なアドバンス幅、Y 方向のアンチ エイリアシング、ハードウェアアクセラレーションによるテキスト レンダリング、ビデオ メモリへの事前レンダリング テキストの積極的なキャッシュなど、ClearTypeテクノロジーの進歩を活用しています。 [ 24 ] ClearType は、古い WPF 3.x アプリケーションでは無効にできません。[ 25 ]
Windows Forms のElementHost機能は、およびクラスを使用することで実現できますWindowsFormsHost。
WinForms の使用を有効にするには、開発者は WPF C# コードからこれを実行します。[ 26 ]
System.Windows.Forms.Integrationを使用します。WindowsFormsHost.EnableWindowsFormsInterop ( ) ;WPF プログラムは、CLRのP/Invoke機能を介して、Windowsライブラリの関数を呼び出すなど、ネイティブ機能にアクセスできます。これにより、アンマネージド ライブラリを含むオペレーティングシステムの他の部分と通信して操作することが可能になります。[ 27 ]
WPF は、ペン入力用のWindows Ink [ 28 ]と、Windows 7以降でのマルチタッチ入力[ 29 ]をサポートしています。また、開発者がアクセシブルなインターフェイスを作成したり、UI を自動テストフレームワークに公開したりできるように、Microsoft UI Automationもサポートしています[ 30 ] 。
Web開発用のマークアップ言語の成功を受けて、WPFはXMLをベースとした拡張アプリケーションマークアップ言語(XAML ; / ˈzæməl / )を導入しました。XAMLは、アプリケーションのユーザーインターフェイスをより効率的に開発する方法として設計されています。[ 31 ] XAMLは宣言型言語であり、開発者(または設計者)は手続き型プログラミングを使用せずにコンポーネントの動作と統合を記述します。アプリケーション全体が完全にXAMLで構築されることはまれですが、XAMLの導入により、アプリケーション設計者はアプリケーション開発サイクルに効果的に貢献できるようになります。XAMLを使用してユーザーインターフェイスを開発すると、モデルとビューを分離することも可能になり、これは優れたアーキテクチャ原則と考えられています。[ 32 ] XAMLでは、要素と属性は、基となるAPIのクラスとプロパティにマッピングされます。
Web開発と同様に、レイアウトと特定のテーマはどちらもマークアップに適していますが、どちらにもXAMLは必須ではありません。実際、WPFのすべての要素は.NET言語(C#、VB.NET )でコーディングできます。XAMLコードは、すべての.NET言語と同様に、最終的にマネージドアセンブリにコンパイルできます。
WPFアプリケーションは、Windows専用のスタンドアロンのデスクトップ実行ファイルです。
歴史的に、WPF は、 NPAPIプラグインを介してWeb ブラウザーで表示することを目的としたファイル形式であるXBAPへのコンパイルをサポートしていましたが、ブラウザによる NPAPI および XBAP のサポートは段階的に廃止され、現在では WPF for .NET には XBAP コンパイルは含まれていません。[ 33 ] [ 34 ]
WPFは、Microsoftの主力IDEであるVisual Studio の開発に使用されており、Microsoft Expression Blendの開発にも使用されていました。[ 35 ]

WPF とそのレイアウト言語である XAML は、他の多くの UI フレームワークに影響を与えてきました。2007年にリリースされたSilverlight (コードネーム WPF/E - WPF Everywhere) は、非推奨のクロス ブラウザブラウザ プラグインです。Silverlight は、レイアウトに XAML を使用するなど、WPF ベースの実装で、ビデオ、ベクター グラフィックス、アニメーションをサポートしていました。[ 36 ]アドオンを使用することで、Mozilla Firefox、Internet Explorer 6以降、Google Chrome 42 以前、Apple Safariでサポートされていました。Microsoft は 2015 年に開発者に Silverlight の使用を中止するよう促し、[ 37 ] 2021 年に正式にサポートが終了しました。[ 38 ]
2018年にオープンソースになった後、WPFは、 MITライセンスで配布されているオープンソースの.NETクロスプラットフォームXAMLベースのUIフレームワークであるAvaloniaの開発に影響を与えました。[ 39 ] WPFはWindowsのみを対象としていますが、AvaloniaはWeb(WebAssembly経由)、MacOS、Android、iOS、Linux向けのビルドもサポートしています。Avaloniaの名前は、WPFの開発中のコードネーム(「Avalon」)を参照しており、「WPFの精神的後継者」として売り出されています。[ 40 ] Avaloniaは現在、 Unity、GitHub、JetBrainsが作成したツールで使用されています。[ 41 ]
OpenSilverは、 WebAssemblyを使用してWPFソリューションをWebに移行するために設計されたフレームワークです。2024年12月にリリースされたOpenSilver 3.1には、 Visual Studio Codeで使用するためのXAMLデザイナーが含まれています。[ 42 ]
WPF 用に最初に設計された XAML は、Windows 10、Windows 11、Xbox One、Xbox Series S/Xアプリケーション用に設計されたUWP [ 43 ]や、クロスプラットフォームのネイティブAndroidおよびiOSアプリを作成するために設計された.NET MAUI (旧Xamarin.Forms ) [ 44 ]など、マイクロソフトが開発した他の同様の UI ライブラリにも採用されています。
WPF アプリケーションの開発者は通常、Microsoft Visual Studioを使用します。Visual Studio には、Visual Studio 2008 以降、XAML エディターと WPF ビジュアル デザイナーが組み合わされています。[ 45 ] Visual Studio 2008 より前は、WPFウィンドウ、ページ、およびユーザー コントロールを作成するためのWYSIWYGエディターの最初のリリースは、Cider というコードネームの WPF デザイナー アドインでした。これは、 WPF の最初のリリース用の .NET Framework 3.0 CTP用の Visual Studio 2005 拡張機能として Visual Studio 2005 で利用可能でした。 [ 46 ]
WPFプロジェクトの開発にはVisual Studioは必ずしも必要ではなく、 MSBuildを使用してコマンドラインでソリューションを構築できます。[ 47 ]
Microsoft Blend は、 2D および 3D グラフィックス、テキスト、フォーム コンテンツを含む WPF アプリケーションを作成するためのアートボードを提供するデザイナー向けツールです。他のツールにエクスポート可能なXAMLを生成し、ソリューション (sln ファイル) およびプロジェクト形式 (csproj、vbproj) を Microsoft Visual Studio と共有します。Microsoft Expression Design は、 XAMLにエクスポートするためのビットマップおよび 2D ベクター グラフィックス ツールです。
{{cite book}}:|website=無視されました (ヘルプ)