WinUI 3 のいいところ
はじめに
WinUI 3(Windows App SDK)での開発は地獄です。不可解な設計、足りなすぎる機能、多すぎるバグ(しかも長年放置)、などなど。
しかしそれでもなお WinUI 3 を使っているのは、それなりに「いいところ」もあるからです。今回は私が思う WinUI 3 のメリットをまとめました。
Fluent デザイン
WinUI 3 の分かりやすいメリットは、GUI の見た目です。
WinForms(フォーム)や WPF のデザインは(デフォルトでは)味気ない直線ですが、WinUI 3 はデフォルトで Fluent デザインとなっており、モダンな感じになります。
メニューなどがやや半透明になってメインウィンドウの内容の色がうっすらと反映される「アクリル効果」も付いてきますし、テーマを OS に合わせることも可能です。
ちょっとしたツールのようにボタンとラベル程度しか使わない GUI だとあまり差は出ませんが、それでも WinUI 3 のほうが多少マシな感じはします。
コントロールの種類も豊富で、WPF に標準では備わっていないトグルスイッチ(左右にスライドするオンオフ)やレーティングコントロールなどもあります。
WPF も .NET 9 以降ならば Fluent デザインを使用できるようになりましたが、コントロールのラインナップでは WinUI 3 に一日の長があるようです(とはいえ、DataGrid のように逆に WinUI 3 に無いコントロールもありますが)。
GUI 機能
GUI 関連ではデザイン面だけではなく機能面でも気に入っている点がいくつかあり、以下に挙げます。
カスタムタイトルバー
WinUI 3 ではカスタムタイトルバーを簡単に作成することができます。ボタンやラベルなども自由にタイトルバーに埋め込めます。
右側のボタン類(最大化ボタンなど)の動作については再実装する必要はなく、ノーコードでデフォルト動作してくれるのも嬉しい点です。
カスタムタイトルバーの作り方についてはこちらの記事をご覧ください。
トースト通知
WinUI 3 では簡単にトースト通知を出すことができます。
アイコンフォント
Windows には Segoe MDL2 Assets / Segoe Fluent Icons というピクトグラム的なフォントが標準でインストールされています。
WinUI 3 ではこれらのピクトグラムを FontIcon でボタンなどに組み込めます。WPF でも TextBlock などでフォント指定すれば組み込めるとは思いますが、WinUI 3 のほうが専用コントロールになっている分フォールバックなどで有利かなと思います。
アクセスキー表示
アクセスキーを設定している場合、Alt キーを押して離すとアクセスキーが表示されます(Excel などと同じ動作)。
アイコンフォントでピクトグラムだけ表示しているボタンがある場合などは特に有用だと思います。
RelativePanel
WPF の DockPanel は LastChildFill が便利で、ウィンドウサイズの変更に追随して残りの領域をコントロールが埋めてくれます。
しかし例えば、ラベル、テキストボックス、ボタンの順に配置してテキストボックスが LastChildFill で伸び縮みする場合、タブオーダーは(見た目の順番とは異なり)テキストボックスが最後になってしまうので違和感が出てしまいます。
WinUI 3 では DockPanel の代わりに RelativePanel が登場しました。残念ながら DockPanel のようなお手軽さはないのですが、その代わり、見た目の順番とタブオーダーを揃えることが可能で、個人的には気に入っています。
Native AOT 対応
WinUI 3 アプリは Native AOT(.NET 中間コードではなくネイティブコードによるバイナリでの高速動作)(以降「AOT」)に対応可能です。
WinForms や WPF は AOT の前提となる「トリミング」に(少なくとも公式では)対応しておらず、AOT できません。
本稿執筆時点では AOT 自体が発展途上のため、実アプリに AOT を適用するのはまだまだ困難が待ち受けている段階です。元から地獄の WinUI 3 アプリ開発に AOT が混じると地獄レベルがさらにアップしてしまいます。とはいえ、まがりなりにも「対応可能」というのは明確にメリットです。
AOT のやり方についてはこちらの記事をご覧ください。
静的バインド
WinUI 3 の MVVM では、データバインド(ビューとビューモデルのデータ受け渡し)に静的バインド({x:Bind}
)が使用可能です。
C# を好んで使う方は、ビルド時にきちんとエラーが出ることを好ましく思っているはずですが、WPF のデータバインドは動的バインド({Binding}
)なので、データバインド部分にミスがあってもビルドが通ってしまい、バグの温床になっています。個人的には WPF の不満トップクラスが動的バインドでした。
WinUI 3 の静的バインドではきちんとビルドエラーが出ますし、そもそもサジェストされるのでミスも減っています。
また、個人的にはさほど気にしていないのですが、パフォーマンスも静的バインドのほうが高いようです。
ちなみに、WinUI 3 でも動的バインドは使用可能です。
多言語化
WinUI 3 ではアプリの多言語化が比較的簡単なので、グローバルにアプリをリリースできます。
多言語化についてはこちらの記事をご覧ください。
WinUI 3 アプリ
以上のようなメリットを感じているので、筆者はこれまでに以下のようなアプリを WinUI 3 で開発してきました。
ニコカラメーカー 3
ニコカラメーカー 3 はカラオケ字幕動画(ニコカラ)を手軽に作るためのアプリです。
もちからプロデューサー
もちからプロデューサーは動画持ち込みカラオケ(持ちカラ)で動画を検索・予約・再生するためのリモコンアプリです。ニコニコ動画にも対応しています。
しゃべって唄詠
しゃべって唄詠は UTAU 音源(音声合成)でのおしゃべりを、音声入力で手軽に実現します。
おわりに
本稿で挙げたメリットは極めて個人的な感想なので、他の方はまた別のメリットを感じているかと思います。
みなさんが思うメリットをコメントに書いていただければ幸いです。
確認環境
項目 | 環境 |
---|---|
OS | Windows 11 Pro 23H2 |
Visual Studio | 2022 17.14.9 |
.NET | 9.0 |
Template Studio for WinUI | 5.5 |
WinUIEx | 2.6.0 |
Windows App SDK | 1.7.250606001 (1.7.3) |
参考リンク
- DockPanel クラス
- FontIcon Class
- RelativePanel Class
- WinUI 3 タイトルバーにコントロールを載せる(Visual Studio のように)
- WinUI 3 で Native AOT が簡単になっていた
- WinUI 3 の多言語化
- WPF for .NET 9 の新機能
- 既知のトリミングの非互換性
- しゃべって唄詠
- ニコカラメーカー 3
- もちからプロデューサー
主な改訂履歴
- 2025/07/28 初版。
- 「Native AOT 対応」に加筆。
Discussion
静的バインドは確かに嬉しいです。
WPFではDataContextが一文字違いでバグるとか不毛な事が起きてましたし。
逆に、WPFでは簡単にできてたけどWinUI3では自前でビヘイビア実装とか、下手するとP/Invokeが必要になるものがまだあるのが辛いです。
コメントありがとうございます。静的バインドいいですよね。
今回は「いいところ」がテーマなのでダメなところはあえて蓋をしていますが、まぁダメなところ多いですよね……。