| Windows プレゼンテーション ファウンデーション (WPF) | |
|---|---|
| 原作者 | マイクロソフト |
| 開発者 | .NET ファウンデーション |
| 初回リリース | 2006年11月21日 (2006年11月21日) |
| 安定版リリース | |
| リポジトリ | |
| 書かれた | C#、C++、C |
| オペレーティング·システム | マイクロソフトウィンドウズ |
| プラットフォーム | .NET フレームワーク、.NET |
| タイプ | ソフトウェアフレームワーク |
| ライセンス | MITライセンス |
| Webサイト | |
Windows Presentation Foundation ( WPF ) は、Windowsベースのデスクトップアプリケーション用の無料かつオープンソースのユーザーインターフェースフレームワークです。WPF アプリケーションは.NETベースで、主にC#とXAMLを使用して開発されます。[ 2 ]
WPFはもともとMicrosoftによって開発され、 2006年に.NET Framework 3.0の一部として最初にリリースされました。 2018年に、MicrosoftはMITライセンスの下でWPFをオープンソースとしてリリースしました。[ 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ファイルと、拡張子が.xamlである関連C#ファイル(「コードビハインド」と呼ばれることが多い)の2つのファイルを使用して定義されます.xaml.cs。XAMLファイルは、UI要素のレイアウト、コンテンツ、その他のプロパティを宣言的に定義し、C#ファイルは、インタラクティブ機能のためのコードエントリポイントを公開します。[ 4 ]
対話型のHello, World!プログラムの基本的な例は次のように作成できます。
メインウィンドウ.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>メインウィンドウ.xaml.cs:
System.Windowsを使用します。名前空間WpfExample {パブリック部分クラスMainWindow : Window {パブリック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= "{バインドユーザー名}" />パブリッククラスExampleViewModel {パブリック文字列ユーザー名{取得;設定; } }これにより、テキスト ブロックにプロパティの値が表示されますUsername。
データバインディングの方向は設定可能で、UIからソース(例:テキストボックスに入力されたテキストがコード内のバインドされた文字列プロパティに伝播される)、ソースからUI(例:コードに格納されている現在の時刻を表示するためにビジュアルクロックが更新される)、または双方向に定義できます。[ 16 ]
データバインディングには型に関する制限はなく、構造体、クラス、コレクションをバインディングできます。コンバーターを使用すると、バインディング中に使用される値と型を転置することができます。例えば、テキストボックスをDateTimeプロパティにバインディングし、コンバーターを使用して時刻をフォーマットされたローカライズされた日付文字列として表示することができます。[ 16 ]
組み込みコントロールのほとんどのプロパティはデータバインドが可能で、カスタムコントロールでは依存関係プロパティを定義することでバインド可能なプロパティを作成できます。[ 16 ] [ 17 ]
MVVMは、MicrosoftがWPF開発者向けに推奨するアーキテクチャパターンであり、データバインディングに大きく依存しています。[ 18 ]
テンプレートとスタイルを使用して、開発者は UI 要素のビジュアルと構造を定義できます。
スタイルとは、単一のプロパティ属性を持つUI要素に適用できるプロパティ設定の組み合わせです。例えば、「青いラジオボタン」というスタイルを作成し、プログラム内の任意の数のラジオボタンコントロールで再利用することができます。スタイルはコントロールのプロパティのコレクションを変更できますが、構造的な大幅な変更を目的としたものではありません。
テンプレートは、WPFアプリケーションの一部に代替UIを定義するためのメカニズムです。WPFには、様々なシナリオに対応する複数のテンプレートタイプが用意されていますが、いずれもUI要素のコンテンツ、レイアウト、構造を定義するという共通の目的を持っています。[ 19 ]
WPFでは、多くの視覚プロパティをアニメーション化できます。これは、データバインディングが依存する基盤システムと同じ依存関係プロパティを通じて公開されます。WPFアニメーションはフレームベースではなく、時間ベースです。[ 20 ]
アニメーションクラスは、アニメーション化される.NETプロパティの型に基づいています。例えば、要素の色の変更はColorAnimationクラスで行い、要素の幅(double型)のアニメーション化はDoubleAnimationクラスで行います。[ 20 ]
アニメーションはストーリーボードにグループ化することができ、ストーリーボードはアニメーションを開始、停止、一時停止、その他の操作を行う主な方法です。[ 20 ]
WPFはページ区切りのドキュメントをネイティブにサポートしています。DocumentViewer固定レイアウトのドキュメントを読むためのクラスを提供しています。このFlowDocumentReaderクラスは、ページ単位やスクロール可能など、様々な表示モードを提供し、表示領域のサイズが変更された場合にテキストをリフローします。XML Paper Specificと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 フォーム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 ]また、Microsoft UI Automationもサポートしており、開発者がアクセス可能なインターフェイスを作成し、UIを自動テストフレームワークに公開することができます。[ 30 ]
Web 開発用マークアップ言語の成功を受けて、 WPF はXMLに基づいたeXtensible Application Markup Language ( XAML ; / ˈ z æ m əl / ) を導入しました。XAML は、アプリケーションのユーザー インターフェイスを開発するためのより効率的な方法として設計されています。[ 31 ] XAML は宣言型言語であり、開発者 (または設計者) は手続き型プログラミングを使用せずにコンポーネントの動作と統合を記述します。アプリケーション全体を完全に XAML で構築することはまれですが、XAML の導入により、アプリケーション設計者はアプリケーション開発サイクルにさらに効果的に貢献できます。ユーザー インターフェイスの開発にXAMLを使用すると、モデルとビューを分離することも可能になり、これは優れたアーキテクチャ原則と見なされています。[ 32 ] XAML では、要素と属性は基礎となる API のクラスとプロパティにマップされます。
ウェブ開発と同様に、レイアウトと特定のテーマはどちらもマークアップに適していますが、どちらにもXAMLは必須ではありません。実際、WPFのすべての要素は.NET言語(C#、VB.NET )でコーディングできます。XAMLコードは、他のすべての.NET言語と同様に、最終的にはマネージアセンブリにコンパイルできます。
WPF アプリケーションは、Windows 専用のスタンドアロン デスクトップ実行可能ファイルです。
歴史的に、WPFはNPAPIプラグインを介してWebブラウザに表示されるファイル形式であるXBAPへのコンパイルをサポートしていましたが、NPAPIとXBAPのサポートはブラウザによるサポートが段階的に廃止され、XBAPコンパイルはWPF for .NETには含まれなくなりました。[ 33 ] [ 34 ]
WPFは、マイクロソフトの主力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)など、Microsoftが開発した他の同様のUIライブラリにも採用されています。[ 44 ]
WPFアプリケーションの開発者は、通常、Microsoft Visual Studioを使用します。Visual Studioには、Visual Studio 2008以降、XAMLエディターとWPFビジュアルデザイナーが統合されています。[ 45 ] Visual Studio 2008より前は、WPFデザイナーアドイン(コードネームCider)が、 WPFウィンドウ、ページ、ユーザーコントロールを作成するためのWYSIWYGエディターのオリジナルリリースでした。これは、WPFの初期リリースでは、Visual Studio 2005の.NET Framework 3.0 CTP拡張機能として利用可能でした。 [ 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=無視されました (ヘルプ)