初心者向けWPFチュートリアル

⚡ スマートサマリー

WPF (Windows プレゼンテーション Foundation)であり、 Microsoft豊かなものを構築するためのフレームワーク Windows デスクトップアプリケーション。初心者向けに、XAML、データバインディング、ハードウェアアクセラレーションによるグラフィックスを組み合わせて、少ないコードで拡張性と視覚的に豊かなユーザーインターフェースを作成する方法を学びます。

  • 🧭 Foundation: WPFは、.NETプラットフォーム内で動作する、ベクターベースのDirectX対応UIフレームワークです。
  • 🎨 XAMLマークアップ: 宣言型XML構文は、インターフェース設計とC#ビジネスロジックを分離します。
  • 🧱 Archi構造: PresentationFramework、PresentationCore、およびMilcoreは、DirectX上で連携してレンダリングを行います。
  • 🔗 データバインディング: 組み込みのバインディングにより、コントロールとデータソースが接続され、MVVMパターンが実現されます。
  • 🛠️ 実践的なスタート: Visual Studioのテンプレートを使用すると、7つのステップで最初のWPFアプリを構築して実行できます。
  • 🚀 現代における関連性: WPFはオープンソースであり、.NET 10に同梱され、長期サポートが提供されます。

初心者向けWPFチュートリアル

WPFとは?

WPF 構築するためのフレームワークです Windows 開発者がコードの複雑さを軽減しながら、3D アニメーションと豊富な色彩を備えたリッチなユーザー インターフェイスを作成できるアプリケーションです。最新のグラフィック カードのハードウェア アクセラレーションを使用するベクトルベースのレンダリング エンジンであり、UI を高速化し、高いスケーラビリティを実現します。WPF は、 Windows プレゼンテーション Foundation.

WPFはWinFormsの進化形と考えることができます。操作しやすいグラフィカル表示システムを提供し、 Windows また、UIとビジネスロジックを明確に分離しています。

WPFアプリケーションは通常、スタンドアロンのデスクトッププログラムとして展開されますが、他のアプリケーションに組み込まれたオブジェクトとしてホストすることも可能です。

なぜ WPF なのか?

WPFプラットフォームを使用する理由は数多くあります。主な理由としては、以下のようなものが挙げられます。

  • さまざまな種類のメディアを扱う必要がある場合に使用する理想的なプラットフォーム
  • WPF を使用すると、スキン付きユーザー インターフェイスを作成できます。また、UI の一部をロードしたり、XML データをバインドしたりする必要がある場合にも役立ちます。
  • これにより、大規模な .NET クラス ライブラリが構築されているため、その利点を活用できます。 .NETテクノロジー
  • 解像度に依存しないため、WPFを使用して開発されたアプリケーションは、小型タブレット画面でも20インチモニターでも実行できます。
  • WPFはWinAPIではなくDirectXをベースに構築されています。クライアントコンピュータのグラフィックスシステムを使用するため、より優れたグラフィックレンダリング能力を提供します。
  • フロー文書モデルをサポートし、「デスクトップパブリッシング」品質のレイアウトを実現します。
  • 外観と動作は疎結合されています。これにより、デザイナーと開発者は2つの独立したモデルで作業できます。
  • WPFフレームワークでは、コードを解析する代わりに、シンプルなXMLドキュメントを使用してツールをグラフィカルに設計できます。
  • GUIの描画にハードウェアアクセラレーションを使用し、パフォーマンスを向上できます。

次に、このフレームワークが時間の経過とともにどのように進化してきたかを見ていきましょう。

WPFの歴史

Windows 1.0 は、最初の GUI 環境でした。 MicrosoftこれはDOSの上に構築されたレイヤーとして機能し、グラフィックとユーザーインターフェースにはGDIとUSERシステムを利用していた。

DirectXは、ゲームやその他のグラフィック関連環境を対象とした高性能グラフィックシステムとして1995年に導入されました。その後、多くのバージョンがリリースされ、DirectX 9ではマネージド.NETコードで使用できるライブラリが提供されました。

WPFのバージョン リリース年 .Netバージョン Visual Studio バージョン 特長
3.0 2006 3.0 無し 初回リリース。
ただし、WPF 開発は VS 2005 で実行できます。
3.5 2007 3.5 VS2008 以下の変更と改善:
アプリケーションモデル、バインディング、コントロール、ドキュメント、注釈、および3D UI要素。
3.5 SP1 2008 3.5 SP1 無し ネイティブのスプラッシュ画面のサポート。 新しい Web ブラウザ コントロール、DirectX ピクセル シェーダのサポート。
4.0 2010 4.0 VS2010 新機能:カレンダー、データグリッド、日付選択機能。マルチタッチおよびマルチ操作に対応。
4.5 2012 4.5 VS2012 起動時間の短縮、大規模データセット表示時のパフォーマンス向上。
データ検証のための新しいリボンコントロールとINotifyDataErrorInfoインターフェイス。
4.5.1 2013 4.5.1 VS2013 性能と信頼性の若干の改善。
4.5.2 2014 4.5.2 NA 大きな変化なし
4.6 2015 4.6 VS2015 透明な子ウィンドウのサポート
HDPI とタッチの改善
4.8 2019 4.8 VS2019 .NET Frameworkの最終メジャーリリース。高解像度ディスプレイ(DPI)に関する修正とアクセシビリティの改善が含まれています。
.NET Core 3.0以降 2019–現在 .NET Core 3.0 から .NET 10 まで VS2019/2022 WPF はオープンソースになり、最新の .NET に同梱される (アプリケーションは引き続き Windows-のみ)。

WPFはもはや.NETとは別個のバージョン管理を行っていません。2019年以降、最新の.NETプラットフォームのオープンソースコンポーネントとして提供されており、現在のリリースは、2025年11月に長期サポート(LTS)バージョンとしてリリースされた.NET 10に含まれています。

WPFの特徴

以下の図は、WPFの主な機能をグループ化したもので、その後に詳細な説明が続きます。

WPFの特徴
WPFの特徴
  • 文書と印刷
  • セキュリティ、アクセシビリティ、ローカリゼーション
  • 相互運用性を提供 Windows フォームコントロール
  • Direct3D は、パフォーマンスが重要なグラフィック アプリケーションで使用されます。
  • レンダリングにビデオ カード ハードウェアを使用します
  • ベクターベースのグラフィックスを使用すると、品質を損なうことなくアプリケーションを拡大縮小できます。
  • WPFは浮動小数点論理ピクセルシステムと32ビットARGBカラーをサポートしています。
  • スタイルとコントロール テンプレートを再定義する
  • 複合フォントから国際フォントを構築する
  • WPFのテキストレンダリングはClearTypeテクノロジーを活用しています。
  • ビデオ メモリ内の事前レンダリングされたテキストのキャッシュ技術を使用できるようにします。
  • すべての制御に対するリソースベースのアプローチ
  • プレゼンテーション タイマーは WPF によって初期化および管理されます
  • 動画とアニメーションの連携にも対応
  • WPFでは、スタイルとは、視覚的なレンダリングに使用されるコンテンツに適用されるべきプロパティのセットです。
  • WPFのテンプレートを使用すると、ドキュメントのUIを変更できます。
  • コマンドはより絶対的なtract と緩やかに結合されたイベントのバージョン
  • コマンドの WPF サポートにより、記述する必要があるコードの量が削減されます

この WPF の次へ C# チュートリアルWPFのコアタイプとインフラストラクチャについて学習します。

WPF コアの種類とインフラストラクチャ

WPF のクラスは、次の XNUMX つの異なるタイプに分類されます。

  • UI要素
  • フレームワーク要素
  • コンテンツ要素
  • フレームワークコンテンツ要素

これらのクラスは基本要素クラスと呼ばれ、ユーザーインターフェースを構成するためのモデルの基礎となるものです。

WPFのユーザーインターフェースは、要素ツリーと呼ばれるツリー構造で構成された要素から成り立っています。要素ツリーは、ユーザーインターフェースを直感的にレイアウトする方法であり、強力なUIサービスを利用するための基盤となる構造です。

XAML

XAML(「ザメル」と発音)と呼ばれる拡張アプリケーションマークアップ言語は、ユーザーインターフェースを定義するための宣言的な方法です。

単純なボタンの XAML 定義は次のとおりです。

<Button
FontSize="16"
HorizontalAlignment="Center"
VerticalAlignment="Center"
>
Say Hello Guru99</Button>

XAML言語を使用する利点:

  • XAMLはフロントエンドの外観とバックエンドのロジックを分離します
  • XAML はユーザー インターフェイスを表現する最も簡単な方法です
  • XAMLはデザインツールと効果的に連携します

コントロール

WPFフレームワークは、次のような多くの便利なコントロールをサポートしています。

  • テキストなどの編集コントロールBox、 チェックBox、 ラジオボタン
  • ListなどのリストコントロールBox、リストビュー、ツリービュー
  • ラベル、WPF ProgressBar、ToolTip などのユーザー情報
  • メニュー、ボタン、ツールバーなどのアクション
  • ボーダー、WPF イメージ、ビューボックスなどの外観
  • OpenFileDialogやPrintDialogなどの一般的なダイアログボックス
  • TabControl、ScrollBar、GroupなどのコンテナBox
  • DockPanel、StackPanel、Gridなどのレイアウト
  • フレームやハイパーリンクなどのナビゲーション

コントロールの外観は、プログラミングを行わずにスタイルとテンプレートを使用してカスタマイズできます。 適切な基本クラスから新しいクラスを派生してカスタム コントロールを作成することもできます。

外観

WPF は、アプリケーションの外観をカスタマイズする機能を提供します。 フォントや背景などのオブジェクトと値を設定できます。

スタイル機能を使用すると、製品全体の特定の外観を標準化できます。 これにより、デフォルトの動作を維持したまま、デフォルトの外観を置き換えることができます。

データテンプレートを使用すると、バインドされたデータのデフォルトの表示方法を制御できます。テーマを利用することで、オペレーティングシステムのビジュアルスタイルを簡単に適用できます。

レイアウトとパネル

レイアウトは、コントロールの適切な配置とサイズ調整に役立ちます。これは、ユーザー向けのプレゼンテーションを作成するプロセスの一部です。WPFフレームワークはレイアウトプロセスを容易にし、UIの外観の適応性を向上させます。

レイアウトインフラストラクチャは、次の 5 つの主要クラスによって提供されます。1) StackPanel 2) DockPanel 3) WrapPanel 4) Grid および 5) Canvas

グラフィック

WPFは改良されたグラフィックスシステムを提供します。

  • WPFはデバイス非依存の単位を使用することで、解像度とデバイスの独立性を実現しています。各デバイス非依存ピクセルは、システムのドット/インチ設定に合わせて自動的にスケーリングされます。
  • WPFはfloatの代わりにdoubleを使用し、より幅広い色彩をサポートします。
  • WPF グラフィックス エンジンは、グラフィックス ハードウェアが利用可能な場合にそれを活用できるように設計されています。

文書と印刷

WPFフレームワークは、3種類のドキュメントを提供します。

  • 修正されたドキュメント: このタイプのドキュメントは WY をサポートしますSIWYGのプレゼンテーション。
  • フロードキュメント: ウィンドウ サイズやデバイス解像度などのランタイム変数に基づいてコンテンツを調整およびリフローできます。
  • XPS ドキュメント: XMLベースの形式で、ページ分けされた電子ペーパーを表現する形式。XPSは、オープンで標準化された文書フォーマットです。

WPFを使用すると、リモート印刷や印刷キューなど、印刷システムをより詳細に制御できます。さらに、XPSドキュメントを印刷形式に変換することなく、直接印刷できます。

基本的な構成要素がわかったところで、これらの要素が内部でどのように組み合わさるのかを見ていきましょう。

WPF Archi構造

WPFは.NETフレームワークの一部です。マネージドコードとアンマネージドコードの両方を含んでいます。WPFアーキテクチャの重要な構成要素は、以下の図に示されています。

WPF Archi構造

WPF Archi構造

WPFアーキテクチャのコンポーネント

  • プレゼンテーションフレームワークコントロール、スタイル、レイアウト、ウィンドウなどのトップレベル要素を作成するのに役立ちます。
  • プレゼンテーションコア: UIElement や Visual などの基本型を保持しており、PresentationFramework.dll 内のすべてのコントロールとシェイプはこれらの基本型から派生しています。
  • CLR:次のような機能を提供することで、開発プロセスの生産性を高めます。 メモリ管理、エラー処理など。
  • ミルコア: Milcore は、DirectX との緊密な統合を提供するアンマネージ コードの一部です。
  • DirectXの: これはWPFのグラフィックをレンダリングする低レベルAPIです。DirectXはドライバーと連携してコンテンツをレンダリングします。
  • ユーザー32: これは多くのプログラムで広く使用されているコアAPIです。メモリとプロセスの分離を管理します。User32は、画面上のどこにどの要素を配置するかを決定するのに役立ちます。
  • カーネル: 入力はカーネルモードデバイスドライバ上の信号と​​して発生し、接続によって正しいプロセスにルーティングされます。 Windows カーネルとUser32。

WPFデータバインディング

データバインディングは、WPFにおける最も強力な概念の一つです。コントロールとオブジェクト間で値を手動でコピーするコードを記述する代わりに、XAMLで接続を宣言するだけで、WPFが両側を自動的に同期します。例えば、次のようになります。

<TextBox Text="{Binding Path=StudentName, Mode=TwoWay}" />

WPFは4つのバインディングモードをサポートしています。

  • 一方通行: ソースデータが変更されると、コントロールが更新されます。
  • 双方向通信: 変化は制御側とソース側の間で双方向に流れる。
  • 一度: コントロールは、ロード時に一度だけソース値を読み取ります。
  • OneWayToSource: コントロールは値をソースにプッシュし、逆方向のプッシュは決して行わない。

データバインディングは、プロフェッショナルなWPFアプリケーションで最も一般的なアーキテクチャであるMVVM(Model-View-ViewModel)パターンの基盤となるエンジンでもあります。これは、ビューをXAMLに保持しつつ、ロジックをテスト可能なC#クラスに記述できるためです。

💡ヒント: データクラスにINotifyPropertyChangedインターフェースを実装してください。これが実装されていないと、コード内でプロパティ値が変更されてもUIが更新されません。

WPFのインストール

WPFのインストール方法については、こちらのリンクを参照してください。 https://www.guru99.com/download-install-visual-studio.html

このWPFアプリケーションチュートリアルの次は、最初のWPFアプリケーションを作成します。

初めての WPF アプリケーションを作成するにはどうすればよいですか?

このWPFの例では、基本的なWPFアプリケーションを開発します。それでは、以下のWPFアプリケーションの例に示されている手順に従って、簡単な実装を始めましょう。

ステップ1) Visual Studioで、[ファイル] > [新規] > [プロジェクト]を選択します。

Visual Studioのファイルメニューに「新規プロジェクト」オプションが表示されている

ステップ2) 新しいプロジェクトウィンドウで

  1. WPF アプリを選択します
  2. 名前を「MyWPF」と入力します
  3. [OK]をクリックします。

WPFアプリテンプレートを選択した新しいプロジェクトウィンドウ

ステップ3) Visual Studioはデフォルトで2つのファイルを作成します

  • XAML ファイル (MainWindow.xaml)
  • CS ファイル (MainWindow.xaml.cs)

ソリューションエクスプローラーにMainWindow.xamlとMainWindow.xaml.csファイルが表示されています。

MainWindow.xaml には、

  1. デザインウィンドウ
  2. XAMLファイル

Visual Studio の MainWindow.xaml デザイン ウィンドウと XAML エディター

XAMLウィンドウには、デフォルトで以下のタグが書き込まれます。

新しいWPFウィンドウ用に生成されたデフォルトのXAMLタグ

デフォルトでは、グリッドが最初の要素になります。

MainWindow.xaml.csには、XAMLデザインファイルに対応するコードビハインドが含まれています。

MainWindow.xaml.csはWPFウィンドウのコードビハインドファイルです。

ステップ4) ツールボックスでは、

  1. テキストをドラッグするBox 要素をデザインウィンドウに追加する
  2. 文章Box デザインウィンドウに表示されます
  3. テキストのXAMLコードが表示されますBox 追加されました

テキストをドラッグするBox ツールボックスからWPFデザインウィンドウへ

ステップ5) テキストを「最初のWPFプログラム」に変更してください。

テキストの編集Box 最初の WPF プログラムへのテキスト プロパティ

ステップ6) スタートボタンをクリック

Visual Studio のスタートボタンをクリックして WPF アプリケーションを実行します

ステップ7) 出力にウィンドウが表示されます

「最初の WPF プログラム」というテキストが表示された WPF アプリケーションウィンドウの実行中

おめでとう! 最初の WPF アプリケーションを設計して作成しました。 次に、この初心者向け WPF チュートリアルでは、WPF と WinForms の違いを見ていきます。

WPF と WinForms の比較

WPF Winフォーム
これは新しいフレームワークであるため、現在の標準により適合しています。 古いものなので、より実証済みです。
柔軟性が高く、機能も豊富です。コーディングやコントロールの購入なしに、非常に高度なアプリケーションを設計できます。 機能はあまり豊富ではない
3人の開発者rd パーティコントロールは、将来の主流となるWPFとの互換性を重視しています。 購入または無料で入手できるサードパーティ製コントロールが多数あります。
XAMLを使用すると、GUIを簡単に作成および編集できます。また、デザイナー(XAML)とプログラマー(C#、VB.NETなど)の間で作業を分担することも可能です。 In Windows フォームでは、すべてのコードが1か所に記述されています。
XAMLのスキルは、WinUI 3、.NET MAUI、Avalonia UIといった新しいフレームワークにもそのまま応用できます。 WinFormsのスキルは主にクラシック Windows デスクトップ開発。
WPFのインボックスコントロールスイートは制限されている インボックスコントロールは非常に強力です

WPF で構築されたアプリケーションの種類

  • WPFはスタンドアロンで使用されます Windows 企業向け基幹業務ツール、ダッシュボード、取引端末、設計ソフトウェアなどのデスクトップアプリケーション
  • Windows フォームと WPF ページは同じアプリケーション内で共存可能
  • ページ/ウィンドウナビゲーションスタイルのアプリケーションを開発できます

最新の.NETにおけるWPF

Microsoft WPFは2018年12月にオープンソース化され、.NET Core 3.0(2019年)以降、.NET 10を含むすべての最新の.NETリリースに同梱されています。アプリケーションを最新の.NETに移行することで、起動の高速化、自己完結型の公開によるデプロイの簡素化、最新のC#言語機能へのアクセスが可能になり、WPFのプログラミングモデルはそのまま維持されます。

WPFは Windows-のみ。今日デスクトップフレームワークを選択する場合、この比較が役立ちます。

フレームワーク 以下のためにベスト
WPF 成熟した、機能豊富な Windows 巨大なエコシステムを持つデスクトップアプリケーション
WindowsUI 3 現代をターゲットにした新しいアプリケーション Windows 11 外観と操作感
.NET マウイ クロスプラットフォームアプリケーション Windows, macOS, Android、iOS

WPFは活発にメンテナンスされており、エンタープライズソフトウェアに深く組み込まれているため、WPFを学ぶことは依然として実用的な投資です。これらのアプリケーションの構築に慣れたら、最も一般的なものを練習する価値があります。 WPFの面接質問 XAML、データバインディング、ビジュアルツリーといった概念を定着させるため。

よくあるご質問

インターフェースの設計にはXAML、アプリケーションロジックにはC#(またはVB.NET)が必要です。オブジェクト指向プログラミングと.NETクラスライブラリの基本的な知識があれば、WPFの学習ははるかに容易になります。

いいえ。WPFはDirectXに依存しており、 Windows API なので、 Windowsクロスプラットフォームの XAML 開発については、以下を検討してください。 アバロニアUI or .NET マウイ.

はい。 GitHubコパイロット コメントからXAMLレイアウト、バインディング式、スタイルを生成できるため、初心者の学習を加速させ、繰り返し行うマークアップ作業を削減できます。

あなたが統合することができます ML.NET ローカル機械学習やクラウドAIサービスを呼び出す場合 Azure C#コードからOpenAIにアクセスし、標準のWPFデータバインディングを通じて結果を表示します。

はい。WPFはMITライセンスの下でオープンソースとして公開されており、Visual Studio Community Editionを使用すれば無料でアプリケーションを開発できます。