93 人が閲覧(直近 30 日) C# / .NET

WPFとは?2026年も現役か・WinFormsやWinUI 3との違いと.NET 10での使い方

WPFとは?2026年も現役か・WinFormsやWinUI 3との違いと.NET 10での使い方

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点です。

  1. プロジェクトファイルの TargetFramework を net8.0-windows(または net9.0-windows)から net10.0-windows に書き換える。
  2. 開発環境を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月】)。
  3. NuGetパッケージを.NET 10対応版へ上げ、.NET 10の破壊的変更一覧のうちWPF・Windows Forms・ランタイムの項目を確認する。
  4. フレームワーク依存で配っている場合は、利用者の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以降などのサードパーティ製ライブラリで、売上規模や開発者数によってはライセンス購入が必要です。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

ほか 3 件の記事からもリンクされています。

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.29 テックブログ ソニー生命の不正アクセス:38.5万件の対象確認と窓口、停止中の手続き
  2. 2026.10.31 テックブログ 松屋の不正アクセス:237万件の対象確認と窓口、漏れたパスワードの守り方
  3. 2026.10.31 テックブログ 無印良品の情報漏洩:MUJIアプリ最大2,726万件の対象確認となりすましメール対策
  4. 2026.10.27 テックブログ Joshin(ジョーシン)不正アクセス:最大600万件の対象とサブスク初期パスワードの対処
  5. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処

RELATED POSTS 関連記事

目次