WPF(Windows Presentation Foundation)は、C#やVisual BasicでWindowsデスクトップアプリを作るための、Microsoft製UIフレームワークです。画面はXAMLで宣言し、データとの連動はデータバインディングに任せます。2006年の登場から20年近く経つため「オワコンでは」と聞かれますが、2026年10月13日にも.NET 10向けの更新が出ています。一方で、.NET版のWPFアプリが使っている.NET 8と.NET 9は2026年11月10日にサポートが終わります。この記事では、WPFの仕組み、WinForms・WinUI 3との違い、.NET 10への移行、最小構成のコードを順に整理します。
まとめ:WPFの位置づけと2026年の採用判断
- WPFとは:.NETに含まれるWindows専用のUIフレームワーク。XAMLで画面を書き、データバインディングとMVVMで画面とロジックを分ける。ベクター描画のため高DPIでも崩れにくい。
- 2026年も現役か:現役。.NET 10(LTS・2028年11月14日までサポート)で使え、dotnet/wpfでは2026年10月13日にv10.0.13が公開された。大型の新機能は少なく、保守とFluentテーマによる見た目の現代化が中心。
- いま急ぐこと:.NET 8・9のWPFアプリは2026年11月10日でセキュリティ更新が止まる。移行先は.NET 10。同日に出る.NET 11はサポートが2年のSTS。
- WinFormsとの違い:WinFormsはフォームにコントロールを置いてイベントを書く方式。WPFは見た目とロジックを分離でき、デザイン変更やテストに強いが、学習量は多い。
- WinUI 3との関係:WinUI 3は新しいWindows機能に追随する別系統で、WPFを廃止するものではない。WPF資産があるなら移行を急ぐ理由は薄い。
- 選ばないほうがよい場面:macOSやLinuxでも動かしたい、Webで配れば足りる、という場合はWPFの出番ではない。XAMLのまま複数OSに対応したいなら、Avalonia UIやUno Platformといった別のフレームワークが候補になる。
WPF(Windows Presentation Foundation)の仕組み
WPFは.NETの、主に System.Windows 名前空間(System.Windows.Forms を除く)にある型の集まりです。Microsoft LearnのWPF概要は、WPFを「解像度に依存せず、ベクターベースのレンダリング エンジンを使用する UI フレームワーク」と説明し、XAML、コントロール、データバインディング、レイアウト、2D/3Dグラフィックス、アニメーション、スタイル、テンプレートを備えるとしています。
XAMLとコードビハインドの分担
画面の見た目はXAML(ザムル)というXMLベースの言語で書き、ボタンを押したときの処理などはC#の「コードビハインド」に書きます。ビルド時にXAMLはBAMLというバイナリ形式に変換され、XAMLに対応するpartialクラスも生成されます。コンストラクターの InitializeComponent() が、このBAMLを読み込んでC#のクラスと結びつけます。XAMLの文法はXAMLとは?読み方(ザムル)・XMLとの違いと書き方をWPF/.NET MAUIの実例で解説で扱っています。
データバインディングとMVVM
WPFの中心機能は、{Binding Name} と書くだけで入力欄とC#のプロパティを同期させるデータバインディングです。値の変更を通知する INotifyPropertyChanged と、ボタン操作を表す ICommand を組み合わせると、コードビハインドをほぼ空にしたまま画面を動かせます。この構成を体系化したのがMVVM(Model-View-ViewModel)パターンで、WPFとともに広まりました。考え方はMVVMとは?仕組み・構成要素とMVC/MVPとの違いを実装例で解説にまとめています。
描画基盤とWindows専用という制約
WPFはDirectXで描画し、座標は1/96インチ単位のデバイス非依存ピクセルで扱います。画面の拡大率が150%や200%でもぼやけにくいのはこのためです。一方、Microsoft Learnは「.NET はクロスプラットフォーム テクノロジですが、WPF は Windows でのみ実行されます」と明記しています。.NET 10で作ってもmacOSやLinuxでは動きません。
WPFアプリケーションとは:.NET版と.NET Framework版の違い
「WPFアプリ」には2つの実装があります。新規開発は.NET版を選ぶべきですが、社内で動いている古いWPFアプリは.NET Framework版であることが多く、サポートの考え方が違います。
| 項目 | .NET版WPF | .NET Framework版WPF |
|---|---|---|
| 対象 | .NET 8 / 9 / 10 など | .NET Framework 4.x |
| ソースコード | GitHub dotnet/wpf(MIT) | Reference Sourceで参照用に公開 |
| 実行に必要なもの | Desktop Runtime、またはアプリに同梱 | Windowsのコンポーネント |
| 新機能 | 毎年11月の.NETで追加 | 追加されない |
| TargetFramework | net10.0-windows | net48 / net481 |
WPFアプリを動かす.NET Desktop Runtime
「Microsoft Windows Desktop Runtime」は、.NET版のWPFとWindows Formsのアプリを動かすためのランタイムです。Microsoft Learnのインストール解説のとおり、Desktop Runtimeは.NET Runtimeを内包しますが、逆に.NET Runtimeだけを入れてもWPFアプリは起動しません。「.NET Desktop Runtimeが必要です」と出たら、表示された版(例:10.0)とアーキテクチャ(x64・x86・Arm64)に合うものを入れます。2026年10月13日時点の最新パッチは10.0.13・9.0.21・8.0.32です。
配る側は、利用者にランタイムを入れてもらう「フレームワーク依存」と、ランタイムごと同梱する「自己完結」を選べます。.NET 10のテンプレートにCommunityToolkit.Mvvmを追加した最小のWPFアプリ(後述の構成)を dotnet publish -r win-x64 で発行して比べると、フレームワーク依存は6ファイル・344KB、自己完結(--self-contained)は245ファイル(言語別リソースのフォルダー13個を含めると401ファイル)・140MBでした(SDK 10.0.401、同梱ランタイム10.0.12で計測)。自己完結の場合、10.0.13などのセキュリティ修正を届けるにはSDKを更新して再発行する必要があります。台数が多い社内配布なら、Desktop Runtimeを資産管理ツールで入れてフレームワーク依存で配る方が更新を一元化できます。
WPFとWindows Forms(WinForms)の違い
WinFormsは2002年の.NET Framework 1.0から続く、もう一つのWindows向けUIフレームワークです。どちらも.NET 10で現役なので、違いは新旧ではなく作り方にあります。
| 観点 | WPF | Windows Forms |
|---|---|---|
| 画面定義 | XAML(コードでも可) | デザイナーが生成するC#コード |
| 描画 | DirectX・ベクター | GDI/GDI+ |
| 高DPI | 標準で追従 | 設定と調整が必要 |
| 見た目の変更 | スタイル・テンプレートで一括 | コントロール単位で個別 |
| データ連携 | XAMLのBindingで宣言 | BindingSourceで接続 |
| 学習量 | 多い | 少ない |
チームがWinFormsに慣れていて、入力フォーム数枚の社内ツールを作るなら、WinFormsのままで困ることは少ないはずです。スタイルで多数の画面の見た目を揃えたい、ViewModelを単体テストしたい、高DPI環境の利用者が多い、といった要件が重なるほどWPFの仕組みが効きます。なお「Windows Formsのサポート終了」は起きておらず、.NET 10ではWPFとWinFormsのクリップボードAPIが共通化されるなど、両者は並行して保守されています。
WPFはオワコンか:サポート期限と開発状況から判定
「WPFは普及しない」「オワコン」という声の背景には、2012年以降Microsoftの新しいUI技術がWindows 8のストアアプリ(WinRT)、UWP、WinUIと移り変わり、WPFが主役から外れた経緯があります。判断の材料はサポートと開発の実態です。
WPFのサポート期限と.NETの関係
.NET版WPFのサポート期限は、その.NETの期限と同じです。.NETサポートポリシーと.NET 11のリリースノートを2026年10月15日に確認した結果が次の表です。
| ランタイム | 種別 | 最新(2026-10-13) | サポート終了 |
|---|---|---|---|
| .NET 11 | STS | RC2(GAは2026-11-10) | 2028年11月9日 |
| .NET 10 | LTS | 10.0.13 | 2028年11月14日 |
| .NET 9 | STS | 9.0.21 | 2026年11月10日 |
| .NET 8 | LTS | 8.0.32 | 2026年11月10日 |
| .NET Framework 4.8.1 | Windowsコンポーネント | – | 搭載Windowsのサポートに準じる |
.NET 11は.NET 10より新しいのに、サポート終了は5日早い2028年11月9日です。業務アプリの移行先には、LTSの.NET 10を選ぶのが筋です。
dotnet/wpfリポジトリの開発状況
GitHubのdotnet/wpf(MITライセンス)では、2026年10月13日に.NET 10向けv10.0.13、.NET 9向けv9.0.21、.NET 8向けv8.0.32が同日に公開されました。次期版は v11.0.0-rc.2.26504.105 のタグまで進んでいます。月例のサービス更新と、年1回の.NETメジャー版への追随は途切れていません。
中身は保守寄りです。.NET 10の新機能ページに並ぶのは、Fluentスタイルの対象をDatePicker・TextBox・RichTextBoxなどに広げたこと、フォント描画やXAML解析の性能改善、System.XamlとWindowsBaseへの4,000件超の単体テスト追加です。同じページは「Fluent UI style support is still in progress」とも書いています。.NET 11 RC1の変更点も、自己完結発行への ijwhost.dll 同梱、DWM障害時のクラッシュ防止とWindows 10でのFluent背景の修正など、不具合修正が中心です。
WPFで作られた代表的なアプリ
Microsoft自身の大型製品ではVisual Studioが代表例です。Visual Studioチームの2010年2月16日の公式ブログは、Visual Studio 2010でメインメニュー、ツールバー、コンテキストメニュー、ステータスバー、ウィンドウ管理、スタートページ、テキストエディターをWPFで作り直したと説明しています(ソリューションエクスプローラーとツールボックスは当時は移行対象外)。表に出にくいだけで、社内の業務システムや製造・医療現場の端末アプリにも、Windows専用で長く使われるWPFアプリが多くあります。
Windows業務アプリでのWPF採用の妥当性
結論として、WPFはオワコンではありません。業務アプリの新規開発でWPFを選ぶのは今も合理的です。.NET 10(LTS)なら2028年11月14日までサポートが続きます。Windows App SDKも既存のWPFプロジェクトから使えますが、NuGetパッケージの追加と、パッケージ化しないアプリではランタイムの初期化が別途必要です。Windows 11の最新UIそのものを売りにするならWinUI 3も比較に入れます。既存のWPF資産を活かした業務アプリの刷新や新規開発は、弊社の業務用・Webアプリ開発でも相談を受けています。
.NET 8・9のWPFアプリを.NET 10へ移行する手順
.NET 8・9のWPFアプリは、2026年11月10日以降セキュリティ修正が出ません。.NET Frameworkからの移行と違い、.NET 8・9から10へはプロジェクト形式が同じなので、作業の大半は次の4点です。
- プロジェクトファイルの
TargetFrameworkをnet8.0-windows(またはnet9.0-windows)からnet10.0-windowsに書き換える。 - 開発環境をVisual Studio 2026(バージョン18.0)以降にする。Microsoft Learnは「Targeting net10.0 is officially supported in Visual Studio 18.0+ only」としており、Visual Studio 2022は対象外です(Visual Studio 2026の新機能|VS2022との違い・サポート期限とVS2027への更新【2026年10月】)。
- NuGetパッケージを.NET 10対応版へ上げ、.NET 10の破壊的変更一覧のうちWPF・Windows Forms・ランタイムの項目を確認する。
- フレームワーク依存で配っている場合は、利用者のPCに.NET 10のDesktop Runtimeを先に入れる。8.0のDesktop Runtimeが入っていても、10.0向けにビルドしたアプリは起動しません。
.NET 10そのものの変更点とC# 14は.NET 10(LTS)とは?サポート期限・新機能・C# 14と.NET 8/9からの移行を解説にまとめています。
WPFとWinUI 3・.NET MAUIの違い:後継の位置づけ
「WPFの後継」とよく言われるのはWinUI 3ですが、公式にWPFの置き換えと位置づけられているわけではありません。3つの違いは対応OSと、新しいWindows機能への近さです。
| 観点 | WPF | WinUI 3 | .NET MAUI |
|---|---|---|---|
| 対応OS | Windows | Windows 10 1809以降 | Windows・macOS・iOS・Android |
| UI記述 | XAML | XAML | XAML |
| XAMLデザイナー | あり | なし | なし |
| Windows App SDK | 別途参照して利用 | UI層として同梱 | Windows上はWinUI 3経由 |
| 向く場面 | 業務アプリ・既存資産 | Windows専用の新規アプリ | モバイルも含む複数OS |
Windows専用で最新の見た目と機能を取り込みたいならWinUI 3、スマートフォンも同じコードで作りたいなら.NET MAUIです。社内のWindows PCだけで使い、XAMLデザイナーで画面を組みたいならWPFが残ります。WinUI 3の弱点はWinUI 3とは?WPFとの違い・将来性・弱点と始め方【Windows App SDK 2.5】、MAUIは.NET MAUIの将来性は?サポート期限・Xamarin後継・Flutter比較から2026年の採用を判断するで比較しています。
WPFアプリの作り方:.NET 10での最小構成
.NET 10 WPFプロジェクトの作成環境
前提はWindowsと.NET 10 SDKです。Visual Studio 2026なら「.NET デスクトップ開発」ワークロードを入れ、「WPF アプリケーション」テンプレートを選びます。デザインビューとXAMLビューを並べて編集できるWPFデザイナーも使えます。コマンドラインでは次のとおりです。
dotnet new wpf -n HelloWpf
cd HelloWpf
dotnet add package CommunityToolkit.Mvvm --version 8.4.2
生成されるプロジェクトファイルの要点は、ターゲットが net10.0-windows であることと、UseWPF がtrueであることの2点です。次は抜粋で、実際のファイルには上で追加したCommunityToolkit.MvvmのPackageReferenceも入ります。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net10.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
バインディングで動く画面(MVVM)
名前を入れるとボタンが有効になり、押すと挨拶を表示する画面です。ViewModelはCommunityToolkit.Mvvmのソースジェネレーターを使い、[ObservableProperty] から変更通知付きの Name プロパティを、[RelayCommand] から GreetCommand を自動生成させています。
// MainViewModel.cs
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace HelloWpf;
public partial class MainViewModel : ObservableObject
{
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(GreetCommand))]
private string name = "";
[ObservableProperty]
private string message = "";
[RelayCommand(CanExecute = nameof(CanGreet))]
private void Greet() => Message = $"こんにちは、{Name}さん";
private bool CanGreet() => !string.IsNullOrWhiteSpace(Name);
}
<!-- MainWindow.xaml -->
<Window x:Class="HelloWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HelloWpf"
Title="HelloWpf" Width="360" Height="180">
<Window.DataContext>
<local:MainViewModel />
</Window.DataContext>
<StackPanel Margin="16">
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<Button Content="挨拶する" Command="{Binding GreetCommand}" Margin="0,8" />
<TextBlock Text="{Binding Message}" />
</StackPanel>
</Window>
UpdateSourceTrigger=PropertyChanged を付けないと、TextBoxの値はフォーカスが外れるまでViewModelに届かず、ボタンが有効になるのが遅れます。コードビハインド(MainWindow.xaml.cs)はテンプレートのままです。2つのファイルを置いたら dotnet run で起動します。この構成はSDK 10.0.401・net10.0-windowsでビルドが通ることを確認しています(実行にはWindowsが必要です)。
Fluentテーマ(ThemeMode)とWPF UIの選び方
「WPFは見た目が古い」という不満には、.NET 9から入った組み込みのFluentテーマで応えられます。Windows 11風の外観は、App.xamlの Application 要素に ThemeMode を1つ足すだけで全ウィンドウに適用されます。値は Light・Dark・System(OSの設定に追従)・None(既定。従来のAero2)です。
<!-- App.xaml -->
<Application x:Class="HelloWpf.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
ThemeMode="System">
</Application>
注意点は、XAMLでの指定とコードからの切り替えで扱いが違うことです。上のApp.xamlは警告なしでビルドできますが、設定画面で Application.Current.ThemeMode = ThemeMode.Dark; と書くと「error WPF0001: ‘System.Windows.Application.ThemeMode’ は、評価の目的でのみ提供されています」(日本語環境の表示)でビルドが止まりました(SDK 10.0.401で確認)。.NET 9の新機能ページが、コードからの設定を実験的機能と位置づけているためです。実行中にテーマを切り替えたいなら、該当箇所を #pragma warning disable WPF0001 で囲み、将来のAPI変更を受け入れる前提で使います。
組み込みテーマで足りないときの選択肢が、外部ライブラリのWPF UI(NuGetパッケージ名 WPF-UI)です。NuGetの最新版は4.3.0(2026年5月4日・MIT)で、テーマに加えてNavigation、NumberBox、Dialog、Snackbarといった、WPF標準に無いコントロールを提供します。サイドメニュー型のナビゲーションやトースト通知をまとめて揃えたいならWPF UI、既存画面の見た目を揃えるだけなら依存を増やさない組み込みのThemeModeが向きます。
MVVMライブラリの選び方:CommunityToolkit.Mvvm・Prism・ReactiveProperty
WPF本体にはMVVMの補助クラスがほとんど無いため、実務ではライブラリを1つ選びます。ライセンスが分かれ目になるのはPrismです。
| ライブラリ | 安定版(2026年10月) | ライセンス | 主な用途 |
|---|---|---|---|
| CommunityToolkit.Mvvm | 8.4.2(2026-03) | MIT | 変更通知・コマンドの生成 |
| Prism.Wpf | 9.0.537(2024-08) | Community/Commercial | 画面切替・モジュール分割 |
| ReactiveProperty.WPF | 9.9.0(2026-07) | MIT | 既存のRx資産との連携 |
Prismの商用利用には条件があります。Prismは9.0からCommunity/Commercialの二重ライセンスに変わりました。公式ドキュメントは無償のCommunity Licenseの対象を「年間総収入が100万米ドル未満、または外部から300万米ドルを超える資金調達を受けたことがない」組織と案内しています。一方、正本の契約書(Prism Software License Agreement)では、年間総収入100万米ドル未満に加えて組織内の開発者が5人以下であることも「すべて満たす」条件に挙がり、官公庁は規模を問わず対象外です。親会社などに支配される組織はグループ全体の年間総収入で判定され、受託開発のように他社のためにサービスを提供する場合は、提供先の組織も条件を満たす必要があります(契約書4.2.j.6)。条件を満たさなければCommercial Licenseの購入が必要です。MITライセンスで提供されていたのは8.1.97(2021年5月)までなので、古い記事にある「Prismは無料」という説明は9.0以降には当てはまりません。
ReactivePropertyは、提供元のREADMEが新規アプリならR3の利用を検討するよう案内しており、9.9.0では移行支援用のReactiveProperty.R3パッケージも追加されました。
新規開発で迷ったら、Microsoftが.NET Foundation配下で公開しているCommunityToolkit.Mvvmから始め、画面の動的な差し替え(Region)やモジュール分割が本当に必要になった時点でPrismを検討する順番が無難です。
よくある質問
WPFはフレームワークですか?
はい。.NETに含まれるWindows向けのUIフレームワークです。単体の製品ではなく、.NETの.NET Desktop Runtime、または.NET Framework 3.0以降の一部として提供されます。
WPFの開発言語は何ですか?
画面はXAML、処理はC#またはVisual Basicで書きます。Microsoft Learnのサンプルも、C#とVisual Basicの両方で提供されています。
WPFがあまり普及しないのはなぜですか?
普及度を示す公式統計はありませんが、XAML・バインディング・MVVMと覚えることが多いこと、Windows専用であること、2012年以降MicrosoftがUWPやWinUIを新しいUI技術として打ち出してきたことが、そう言われる背景です。WPF自体は.NET 10でも毎月更新が出ています。
WPFのサポートはいつ終了しますか?
WPF単体の終了日はなく、使っている.NETの期限に従います。.NET 10なら2028年11月14日、.NET 8と9は2026年11月10日です。.NET Framework 4.8.1版は搭載先Windowsのサポート期間に準じます。
WPFは無料で使えますか?
.NET版のWPF本体はMITライセンスで無料です。Visual Studio 2026 Communityは、個人開発者なら無償で使えます。組織の場合、エンタープライズ(PC 250台超または年間売上100万米ドル超)以外なら最大5ユーザーまで無償です(オープンソースへの貢献・学術研究・教室での学習は人数無制限)。有償になりうるのはPrism 9以降などのサードパーティ製ライブラリで、売上規模や開発者数によってはライセンス購入が必要です。