いいねされない記事は1年後に消されます。
序文
WinUI 3は、UWPのUI技術を基に、UI層をOSから切り離して独立更新可能にしたデスクトップ向けフレームワークです。
Windows App SDKを通じて配布され、Win32とUWPの統合を目指し、Fluent Designを適用したモダンUIの提供を目的としています。
一方で、現在のWinUI 3は開発者の間で必ずしも好評とは言えません。
「積極的に開発が進んでいる」とする声もある一方、パフォーマンスや安定性への懸念が多く聞かれます。
実装例:
WinUI 3のコントロール(例: NavigationView, WebView2)やFluent Design(Mica、Acrylicなど)は、Windows App SDK経由でアプリに組み込まれ、OSの特定バージョン(例: Windows 10 1809以降)で動作。
開発者は、Windows 11の新機能(例: Mica素材)を、Windows 10でも利用可能(互換性ありの場合)
デカップリングの意味とWinUI 3での実現
**デカップリング(Decoupling)**とは、システムやコンポーネント間の依存を減らし、独立して更新・拡張できるようにする設計思想です。
従来のUWP(およびWinUI 2.x)では、UIコンポーネントがWindows OSに組み込まれており、UI更新にはOSアップデートが必要でした。
WinUI 3ではUIフレームワーク(Microsoft.UI.Xaml)をWindows App SDKの一部としてNuGetで提供することで、OSから切り離された更新が可能となっています。
WinUI 3でのデカップリングの具体的内容
-
従来(UWP/WinUI 2.x)
UWPのUIコンポーネント(Windows.UI.Xaml)はWindows 10/11のOSに組み込まれており、OSのバージョンアップデートに依存して更新されていた。これにより、新しいUI機能を利用するにはOSのアップグレードが必要だった -
WinUI 3
UIフレームワーク(Microsoft.UI.Xaml)をWindows App SDK(旧Project Reunion)の一部としてOSから切り離し、NuGetパッケージとして配布。OSのバージョンに依存せず、WinUI 3自体を独立して更新可能に。
評判が悪い主な理由
※実際に確認は取れていません。伝聞となります。
パフォーマンス関連
-
WPFと異なり不可解な実装
→ WinUI 3では、ウィンドウの位置とサイズを指定することができない。 -
アプリの起動や動作が遅く、WinUI 2やWPFに比べて劣る
特にギャラリーアプリなどで顕著。
Why is WinUI 3 (at least the gallery) a lot slower than WinUI 2? -
ガラス効果(Mica / Acrylic)を使ったアプリが遅く、バグが多い
例: Apple Music for Windows
Twitter
バグと機能制限
-
ScrollViewer内のCanvasでスクロールバーが表示されない、TabViewがストレッチしない
WinUI 3 Issues -
DrawingVisualやMediaクラスなどのサポート不足
WinUI 3 Issues -
AppBarのボタン(最小化・最大化・閉じる)がウィンドウフォーカス時に正しく動作しない
AppBar issues encountered during WinUI 3 development
※バグではなく「制限事項」とのこと。 -
CoreMessaging関連のクラッシュ(例: Copilotアプリ)
GitHubイシューが1年以上放置されている。
開発体験の不満
1.ビジュアルデザイナーがなく、コンパイルが遅い。
Link:Ohh...WinUI3 is really dead! - When can we expect the announcement?
2.開発者モードをオンにしないとテスト/実行できない(WPFでは不要)
https://www.reddit.com/r/dotnet/comments/1ltijdn/what_is_the_future_of_winui_3_framework_from/?tl=ja
3.MessageDialogのデザインがWinUI 3と不一致、ポップアップメニューがきつきつ。
https://shinta0806be.ldblog.jp/archives/10576011.html
WinUI 3の開発経緯
参考: A deep dive into WinUI 3 in desktop apps
WinUI 3のビジョンは、Microsoftが抱えるUWPとWin32の分断を解消し、
あらゆるWindowsデスクトップアプリ開発者に「統一されたモダンUIフレームワーク」を提供することにあります。
UWPとWin32がもたらした技術的分断
APIの互換性
Win32アプリは従来どおりWin32 APIを直接利用可能ですが、
UWPは**制限されたAPIセット(WinRT)**しか使えず、Win32アプリをUWP化するには大幅なコード書き換えが必要でした。
配布方法の違い
UWPはMicrosoft Store経由の配布が基本で、アプリ署名が必須。
一方、Win32は自由に配布できるものの、ストア機能(自動更新など)を享受しにくい制約がありました。
デバイスサポートの方向性
UWPはクロスデバイス(PC、Xbox、HoloLensなど)を前提とする設計でしたが、
Win32はデスクトップ中心。UWPの制約により、多くの開発者がWin32を選好しました。
結果として、モダンUIやストア配信を求めるならUWP、
自由度と互換性を求めるならWin32という二極化が生じていました。
両者の利点を同時に享受することは困難だったのです。
WinUI 3 実装の概要
WinUI 3は、UWP(Universal Windows Platform)のUI機能をデスクトップアプリ向けに拡張し、
Win32アプリとの統合を可能にしたフレームワークです。
Windows App SDKを通して独立した配布と更新が可能になり、
UWPで使用していた Windows.UI.Xaml 名前空間を Microsoft.UI.Xaml に置き換えることで、
互換性を維持しながら拡張を実現しています。
ランタイム
- .NET 5以降(現在は.NET 8対応)または C++/WinRT に対応
- UWPの .NET Native とは異なり、標準の .NET ランタイムで動作
- アプリコンテナ外での実行をサポートし、より自由なデスクトップ統合が可能
オープンソース
ソースコードは GitHub(microsoft/microsoft-ui-xaml) に公開され、
UIコンポーネントやレンダリングロジックがコミュニティ主導で改善されています。
WinUI 3 に関する誤解
引用: X (旧Twitter)
WinUI 3の本来の目的は、UWPをWindowsから切り離し、デスクトップアプリ(アプリコンテナ外)で.NET 5を利用可能にすること。
将来的にはXboxやHoloLensへの展開も視野に入れつつ、まずはデスクトップを最優先として開発が進められました。
主な誤解とその説明
「WinUI 3は完全に新しいUIプラットフォーム」
実際はUWPのXAMLを基盤としており、名前空間の変更によりUWPアプリからの移行を容易にしたもの。
新規のUI基盤ではなく、デスクトップ適用を主眼としています。
「UWPかデスクトップの二択」
実際はアプリコンテナの有無で分岐します。
デスクトップ版は .NET 5 以降を、UWP版は .NET Native を使用するため、
デプロイ方式とランタイムが異なります。
「XboxやHoloLensをサポートしていない」
初期段階ではデスクトップ優先でしたが、ロードマップ上で他デバイス対応も検討されています。
ただし、どのバリアント(UWP版かデスクトップ版)で対応するかは未定。
「WPFやWin32に統合できる」
WinUI 3は独立したフレームワークであり、直接統合は非対応。
XAML Islandを使った連携が必要です。
「XAMLアイランドは不要になった」
依然として異なるUIプラットフォーム間の相互運用には必要。
ネイティブな統合はWinUI 3の優先事項外です。
「XAMLアイランドは一時的なパッチ」
その通りで、WinForms-WPF統合と同様、短期的な解決策に過ぎません。
「WPFからWinUIを直接利用できる」
WinUI 3はフルスタックのUIフレームワークであり、WPFのコントロールライブラリとしての利用は想定されていません。
「WinUIはUWPの名前変更版」
部分的に正しい表現です。UWPのUIをオープンソース化していますが、
アプリコンテナ外で動作する.NET 5/C++対応により、実質的には別物です。
「UWP版WinUI 3は既存UWPのアップグレードパス」
概念的には近いですが、初期段階では優先度が低く、直接互換はありません。
「リリース時にXAMLアイランドがサポートされていなかった」
これは事実です。WPF向けUWPコントロールを既存アイランド経由で利用する想定でした。
クロスプラットフォームを志向する場合は、
Uno Platform や Flutter のような技術が推奨されます。
Avalonia はデスクトップ特化、.NET MAUI はXamarin.Formsベースで発展途上です。
あとがき
前から気になっていた部分についてまとめてみました。
如何でしたでしょうか(構文)
面白くなかったらBad Button,面白かったらフォロー解除をおねがいします。