さて、WinUI3でもいじってみるか
自分で作って使っているMulSyncという同期対象ファイルをプレビューしてから同期するソフトがある。
知っている限りでは不具合も取れて日々稼働している。
このソフトも2011年に作り出してからもう11年。軽い気持ちでWinFormsにコントロール貼って、イベントハンドラーから処理を行うようにしていたら、ソフトが大きくなってメンテナンスが面倒になってきた。
また、作った当時はWindows XPが現役だったこととWindows 7が.NET Framework 3.5を標準で持っていたので.NET Framework 3.5対応で作っていたのだが、高DPIディスプレイが増えてくるとうまく対応できないことが分かった。
そこで、ロジック等をMVVMを意識して外出ししてある程度切り出しができるようにして、メンテナンス性を良くして画面表示部分も高DPIディスプレイ対応できる物にすると言うことを勉強を兼ねて細々と行っている。
で、とりあえず.NET Framework 4.8+WinFormsでやってみたのだが、DPI変更のイベントが発生しないとかてんで話にならなかった。.NET 7が出た今では少しは期待が持てるかもしれないが、その当時はWinFormsにはMVVM対応、高DPI対応とも全く期待が持てなかった。
というわけで残ったのはWPFとWinUI3。WPFは仕事でやっててSurfaceの高DPIを物ともしないので安牌ではあるが、Windows 8.1のサポート終了も見えてきたのでどうせならと言うことでWinUI3を使ってみることにした。だめだったらWPFに行けば良いし。
でWinUI3を触ってみた
使用開始時はまだテンプレートとかなかったので機能拡張を入れて使用開始。初期状態ではストア用セッティングになっていたので、開発者モードを求められたりと言うことがあったけど設定をすれば開発者モードにしなくても動くので、まあ、XAMLということもあってWPFと大きく変わらない感じでプログラムを行うことができている。というところで良いところ、悪いところを挙げてみる。
良いところ
高DPI対応が楽
XAMLのベクターベースの座標系ということもあり、起動したときのDPIに追従してくれるほか、DPIをまたいだときの画面要素の大きさの変更を行うのに何の追加処理も要らない。何も要らないというのがとにかくでかい。
コントロールが現代的である。
ハンバーガーメニューのような現代的なメニューが用意されており、見た目的にもフォントをいじってあげれば日本でも見た目の整ったきれいなソフトが作れそうである。普通にやるとYu Gothic UIとか下手するとリボン以外に使い道のないぶっ壊れフォントMeiryo UIが入るときがあるので、フォント設定は必須である。
デモアプリが良い
WinUI3のコントロール紹介を行うWinUI3ギャラリーというのがあるのだが、これを動かすとコントロールの動きを確かめられる他ソースを見ることができたり、デモアプリ自体のソースへのリンクもあって使い方が見られるというのはどんなことができるかが分かって良いという物である。
悪いところ
ランタイムが分かりづらい
自己完結型で配布すると配布するファイルが多くなるので、ランタイムは別途ダウンロードしてもらってアプリだけを配布する形になると思うのだが、このランタイムが分かりづらかった。
WinUI3のバージョンやプラットフォームごとにファイルが変わるのだが、ファイル名が一緒で分かりづらかったり、ストア経由でランタイムがアップデートされたときにランタイムへのアクセス権がおかしくなって作ったソフトが起動しなかったり、ランタイムのダウンロード場所が開発者用のページなのでユーザーにはどこにランタイムがあるか分かりづらかったりとなんとも面倒であった。
ヘルプの質が悪い
APIのヘルプを見ようとVisual StudioからF1キーでヘルプのページを表示しようとするとUWPないし、UWP用のWinUI2のページに飛ばされたりして、WinUI3の該当するAPIのページまでページをたどる羽目になるので面倒である。
もちろん、近年の日本のマイクロソフトの例に違わず機械翻訳の補正は間に合っていない。
XAMLプレビューがない
レイアウトマネージャーがWinFormsと違ってちゃんとしているので実害は小さいのだが、WPFにはXAMLプレビューがあることを考えると、WinUI3にもあってしかるべきだと思うのでどこまでやる気があるのか不安になってくる。
まとめ
ややネガティブな面も多いが.NET MAUIのバックエンドと言うこともあってまあ、捨てられることはないと思う。
なので、これからWindowsだけで動くソフトを作るのであればWinUI3という選択はありだと思う。