WPF アプリ パターンを WinUI 3 に移行する

WinUI 3 は、WPFと多くの XAML 概念を共有し、最新のWindows エクスペリエンスに最適化されています。 ほとんどのWPF パターンには、WinUI 3 で直接同等のものがあります。 一部の領域では、WinUI 3 では、古いパターンを置き換える改善されたアプローチが導入されており、場合によっては、機能がまだアクティブな開発段階にあります。

このトピックでは、移行を計画できるように、一般的なWPF パターンを WinUI 3 と同等のパターンにマップします。

ヒント

WPF + Windows アプリ SDKの一般的なガイダンスについては、「既存のプロジェクトでWindows アプリ SDKを使用する」を参照してください。

実装パスを選択する前に、 AI アシスタントを使用して最新化を計画 し、AI コーディング アシスタントでソリューションを検査し、移行ガイダンスに基づいている計画を下書きします。

コントロール

ほとんどのWPF コントロールには、WinUI 3 で直接同等のものがあります。 次の表では、マッピングが 1 対 1 ではないコントロールについて説明します。

WPF コントロール WinUI 3 に相当する メモ
DataGrid ファースト パーティに相当するものはありません WinUI 3 には、組み込みの DataGrid は含まれません。 コミュニティで管理されている WinUI.TableView は 1 つのオプションです。 サポートとメンテナンスの要件に基づいてコミュニティ プロジェクトを評価します。
Ribbon CommandBar / Community Toolkit Labs ツール バー スタイルのシナリオでは、 CommandBarCommandBarFlyout を検討してください。 Ribbon コントロールは、Community Toolkit Labs (試験段階) でも使用できます。
StatusBar InfoBar + カスタム レイアウト ステータス メッセージングに InfoBar を使用するか、レイアウトに専用のフッター領域を追加します。
FlowDocumentReader / FlowDocumentScrollViewer RichTextBlock 読み取り専用のリッチ テキスト表示には RichTextBlock を使用します。 WinUI 3 では、最新のアプリ シナリオに適したコンテンツをドキュメント化する方法が異なります。
SecureString による PasswordBox PasswordBox WinUI 3 の PasswordBox は 、パスワード マスクを提供します。 SecureString は、.NET 5 以降では非推奨です。推奨される方法は、ReadOnlySpan<char> パターンを使用して、メモリに保持される資格情報の長さを最小限に抑える方法です。
WebBrowser WebView2 WebView2 はモダン Microsoft Edge (Chromium) エンジンを使用し、すべてのデスクトップ アプリの種類に Web コンテンツを埋め込む場合に推奨されるアプローチです。

XAML の機能

WinUI 3 XAML では、WPFと同じコア概念が使用されます。リソース ディクショナリ、スタイル、データ バインディング、マークアップ拡張機能はすべて同様に機能します。 一部のWPF固有のパターンは、改良された、より構成可能な代替手段に進化しました。

WPF機能 WinUI 3 のアプローチ メモ
DataTrigger / MultiTrigger ビヘイビアー (Community ツールキット) WinUI 3 では、インライン トリガーではなく、アタッチされた動作が使用されます。 XAML 動作パッケージでは、 DataTriggerBehaviorEventTriggerBehaviorなどをサポートしています。 動作は、WPF トリガーよりも構成可能で単体テスト可能です。
DynamicResource ThemeResource ThemeResource は、ランタイム リソース参照を提供し、テーマの変更 (明るい、暗い、ハイ コントラスト) に自動的に応答します。 実行時に変更されない値には、 StaticResource を使用します。
MultiBinding / PriorityBinding コンバーターまたは x:Bind 個々のバインドで複数値コンバーターを使用するか、ビュー モデルで計算されたプロパティで x:Bind を使用します。 x:Bind はコンパイルされ、タイプ セーフであるため、 Bindingよりもパフォーマンスが高くなります。
BasedOn による Style ✅ サポートされています BasedOnでのスタイルの継承は WinUI 3 で動作します。
暗黙的なスタイル ✅ サポートされています リソース ディクショナリの暗黙的なスタイル ( x:Keyのないスタイル) は、想定どおりに動作します。
AdornerLayer カスタム オーバーレイアプローチ WinUI 3 には、同等の装飾レイヤーはありません。 レイアウトで Canvas または Grid オーバーレイを使用して、同様の視覚的装飾効果を実現します。このアプローチは、より明示的で簡単に推論できます。

スレッド処理とディスパッチ

WPF パターン WinUI 3 に相当する メモ
Dispatcher.Invoke / BeginInvoke DispatcherQueue.TryEnqueue WinUI 3 では DispatcherQueue が使用されます。 非同期パターンは、Community Toolkit 拡張機能を使用して実装されています await DispatcherQueue.EnqueueAsync(...)
Application.Current.Dispatcher DispatcherQueue.GetForCurrentThread() 構築時に UI スレッドで DispatcherQueue をキャプチャし、後でバックグラウンド スレッドで使用するために格納します。
BackgroundWorker Task / async-await WinUI 3 では、最新の.NET非同期パターンが適切なアプローチです。 TaskCancellationToken、および IProgress<T> は、すべての BackgroundWorker シナリオをカバーし、 x:Bindと自然に統合します。

アプリ モデルとライフサイクル

WPFの概念 WinUI 3 に相当する メモ
Application.Startup / Exit イベント App.OnLaunched / Window.Closed WinUI 3 では、エントリ ポイントとしてOnLaunchedApp.xaml.csが使用されます。 ウィンドウごとの破棄は、Window.Closed で処理されます。
Application.Current.MainWindow あなたのWindowインスタンス ウィンドウ インスタンスへの参照を App.xaml.cs に保持し、プロパティとして公開します。
Window サブクラス化 AppWindow のカスタマイズ WinUI 3 ウィンドウは、サブクラス化ではなく、 AppWindow (タイトル バー、発表者、オーバーラップ/全画面表示/コンパクト オーバーレイ モード) を使用してカスタマイズされます。 「 アプリ ウィンドウの管理」を参照してください。
SystemParameters DisplayArea / UISettings システム表示プロパティは、 DisplayAreaUISettings を使用して使用できます。

リソースとローカライズ

WPF パターン WinUI 3 に相当する メモ
.resx リソース ファイル .resw + ResourceLoader WinUI 3 では、 .resw ファイルと ResourceLoader API が使用されます。 リソース文字列を移行し、UI 移行の一環としてリソース参照コードを更新します。
x:Static マークアップ拡張 x:Bind 静的プロパティへの変換 静的プロパティまたはシングルトン アクセサーで x:Bind を使用します。 x:Bind はコンパイルされ、 x:Staticよりも明確なエラー メッセージが生成されます。
マージされたリソース辞書 ✅ サポートされています ResourceDictionary.MergedDictionaries WinUI 3 で動作します。
テーマ固有のリソース ディクショナリ ✅ サポートされています ResourceDictionary.ThemeDictionaries は、テーマごとのリソース用の WinUI 3 メカニズムであり、ダーク/ライト モードの自動切り替えと統合されます。

印刷

WPF機能 WinUI 3 の状態 メモ
PrintDialog / PrintDocument PrintManager 完全な印刷のサポートは、 PrintManagerを介して利用できます。 「 アプリから印刷する」を参照してください

開発者ツール

WPF ツールセット WinUI 3 の状態 メモ
XAML デザイナー ([デザイン] タブ) まだサポートされていません Visual Studio XAML デザイナーは現在、WinUI 3 プロジェクトをサポートしていません。 XAML ホット リロード がサポートされており、デバッガーを停止せずにレイアウトとスタイルを反復処理する場合に推奨される方法です。
Blend for Visual Studio ⚠️ 制限付きサポート ブレンドにはVisual Studioが付属しており、WinUI 3 プロジェクトを開くことができます。 XAML ドキュメント アウトラインは機能しますが、デザイン ビューは WinUI 3 では使用できません。

AI支援による移行

WinUI 3 への移行のWPFのGitHub Copilot支援チュートリアルについては、「AI を使用した WinUI 3 へのWPF アプリの移行」を参照してください。

こちらも参照ください