WPF(Windows Presentation Foundation)は、Windows向けのデスクトップアプリケーションを作るためのフレームワークです。画面の見た目はXAMLというマークアップで記述し、その背後の処理はC#などのコードで書いていきます。見た目とロジックをきれいに分けられることが特徴で、画面数が多く複雑なアプリケーションでも整理しやすいという利点があります。
WPFの基本的な仕組みと考え方
WPFでは、画面はXAMLというXMLに似たテキストで宣言的に記述します。たとえばウィンドウにボタンを置きたい場合、Window要素の中にButton要素を書き、そのプロパティとして文字列やサイズ、クリック時のイベント名などを指定します。これが.xamlファイルです。
このXAMLはコンパイル時にBAMLという中間形式に変換され、実行ファイルの中に埋め込まれます。アプリ実行時には、C#側のInitializeComponentというメソッドがこのBAMLを読み込んで、実際のWindowオブジェクトやButtonオブジェクトを生成します。ユーザーから見ると単に画面が表示されているだけですが、裏側ではXAMLをもとにオブジェクトツリーが構築されている、というイメージです。
また、WPFはデータバインディングやスタイル、テンプレートといった仕組みを持ち、画面の見た目とデータの関係を宣言的に結びつけられます。これにより、コードの中で細かくプロパティを代入するのではなく、「このテキストボックスはこのプロパティにバインドする」といった書き方ができ、MVVMパターンと非常に相性の良い構造になっています。
コードの記述方法
WPFの画面は、基本的に三つのファイルで構成されます。一つ目が画面の見た目を定義するXAMLファイル(拡張子が.xaml)、二つ目がそのXAMLに対応するC#のコードビハインドファイル(拡張子が.xaml.cs)、三つ目がプロジェクト全体の設定を記述するcsprojファイルです。
XAMLファイルには、WindowやUserControlなどのルート要素があり、その属性にx:Classという項目があります。ここで指定しているクラス名が、C#側のpartialクラスと対応しています。たとえばWpfApp1.MainWindowというクラス名をx:Classで指定しておくと、MainWindow.xaml.cs側ではpartial class MainWindowとして同じクラスを定義します。この二つがコンパイル時に一つのクラスとして扱われ、InitializeComponentを呼ぶことでXAMLの内容が読み込まれます。
コードビハインドである.xaml.csファイルには、コンストラクタやボタンクリック時のイベントハンドラなど、画面に紐づくロジックを記述します。XAML側でボタンのClickプロパティにHelloButton_Clickのような名前を書いておくと、コードビハインド側で同じ名前のメソッドを定義し、そこに処理を書くことでイベントがつながります。
プロジェクトファイルである.csprojには、どのバージョンの.NETを使うか、WPFを有効にするかどうかといったビルド設定が書かれています。WPFを使う場合、Microsoft.NET.Sdk.WindowsDesktopというSDKを指定し、UseWPFをtrueにし、TargetFrameworkにnet10.0-windowsのようなターゲットフレームワークを記述します。これにより、XAMLコンパイルやWPF用の参照が有効になり、先ほどの一連の流れが利用できるようになります。
.NET 10とは何か
.NET 10は、.NET 5以降続いている統一された.NETプラットフォームの中で、2025年代の世代にあたるランタイムです。従来の.NET Frameworkや.NET Coreが一本化され、サーバーサイド、デスクトップ、モバイル、クラウドなど、多様なアプリケーションを共通の基盤で動かす、という思想の延長に位置付けられています。
WPFにとっての.NET 10は、新しいコンパイラとランタイムを土台にした実行環境という意味合いが強く、古い.NET Framework上のWPFと比べて、パフォーマンス向上、最新のC#言語機能の利用、そしてデスクトップ関連のライブラリの細かな改善といった恩恵を受けることができます。
ターゲットフレームワークとしてnet10.0-windowsを指定することで、WPFアプリはこの新しいランタイム上で動作します。
C#とWPFの関係
C#は、WPFを含む.NET全体の中核となる言語の一つです。WPFのAPIはすべて.NETのクラスとして提供されており、それを呼び出すためにC#を使う、という関係になっています。
開発者は、XAMLで画面構造を記述し、その振る舞いをC#で書きます。ボタンクリックの処理、入力値の検証、データの読み書き、サービスとの通信など、実際のアプリとしての「頭脳」の部分はほぼC#で実装されます。C#の最新バージョンでは、パターンマッチングの強化や簡潔なプロパティ構文、レコード型といった機能が用意されており、これらを活用することでWPFのコードビハインドやViewModelの記述もすっきりさせることができます。
また、MVVMパターンを採用する場合、ViewModelクラスにC#でプロパティやコマンドを定義し、それをXAML側からバインディングするという形を取ります。このとき、INotifyPropertyChangedインターフェイスやObservableCollectionなど、.NETの標準クラスやインターフェイスが重要な役割を果たし、C#の言語機能と密接に連携して動作します。
Fluent UIについて
Fluent UIは、Windows 10やWindows 11以降で採用されている新しいデザイン体系です。透明感のある背景や角丸、落ち着いた配色、モーション表現などを通じて、全体として統一感のある見た目と操作感を目指したものです。
WPF自体はWindows Vistaの頃から存在するフレームワークですが、.NETの新しいバージョンではFluentスタイルのテーマが追加され、これを読み込むことで、ボタンやテキストボックスなどのコントロールをWindows 11風のスタイルに寄せることができるようになっています。アプリケーションのリソース辞書にFluent用のテーマをマージすると、従来のクラシックな見た目から、角丸や余白のバランスが今風のコントロールに一括で切り替わります。
さらに、ThemeModeのようなプロパティを使うことで、ライトテーマとダークテーマを切り替えたり、Windows本体の設定に連動させたりすることも可能です。
Visual Studioでのコンパイル方法とWPFプロジェクトの作成
Visual Studioを使ってWPFアプリケーションを作成する場合、まず新しいプロジェクトを作成します。新規プロジェクトのダイアログでWPFアプリ(.NET)というテンプレートを選び、プロジェクト名や保存先、ターゲットフレームワークとして.NET 10を指定します。初期設定の場合、ソリューション内にWpfApp1プロジェクトが作成され、初期状態のMainWindow.xamlとMainWindow.xaml.cs、App.xamlなどが自動的に用意されます。
プロジェクトを作成したあとは、MainWindow.xamlに画面の定義を書き、MainWindow.xaml.csに処理を書き足しながら開発を進めます。コンパイルはVisual Studioのメニューから「ビルド」→「ソリューションのビルド」を選ぶか、ショートカットのCtrl+Shift+Bを押すことで行えます。ビルドが成功すると、binフォルダの中にnet10.0-windows向けの実行ファイルが生成されます。F5キーを押せばデバッガ付きで実行、Ctrl+F5でデバッガなし実行となり、WPFウィンドウが立ち上がって動作を確認できます。
まとめ
WPFは、XAMLによる柔軟なUI設計とC#の豊富な言語機能を組み合わせて、保守性の高いデスクトップアプリを構築できる強力なフレームワークです。.NET 10やFluent UIとの組み合わせにより、最新のランタイム環境とモダンなデザインを両立した開発が可能になりました。Visual Studioのテンプレートやビルド機能を活用すれば、プロジェクト構成やコンパイル手順も一貫した形で管理できます。





