C#で画面を作るときの選択肢について
はじめにの前に
Qiitaユーザーはzennに引越したのでしょうか。
投げ銭システムは魅力的ですよね。
Qiitaランキングの載っている記事が、個々人の備忘録のレベルに下がってきている気がしています(余計なお世話)
個人的には、記事を書くハードルが下がるので、棲み分けはよいことだと思います。
はじめに
.NET 6やらWinUI 3など、いろいろな技術がリリースされる中
私の主戦場はもっぱらWinFormsです。
たまにWPFも触るけど、UWPは触ったことなく
でもそろそろクロスプラットフォーム開発とかもしてみたいなー、と。
というわけで、この記事では
いろいろ知りたいこと(以下)を、ググりつつ情報をまとめていくための記事です。
- UWPはユニバーサルらしいけど、WPFと何が違うの?
- Uno Platformや、COCOAで話題のXamarinの違いは何なのか?
※注意:はじめに に対する結論があるとはかぎりません
WinForm, WPF, UWPの違い
マイクロソフト公式サイトに比較表があった。
プラットフォームの比較:UWP、WPF、Windows フォーム
表を見てもよく分からない。
勝手なイメージは・・・↓
WinFormn ||||||||すごい隔たり||||||||| WPF || UWP
とくにWPFとUWPの違いが分からない。
- UWPはC++/WinRT、 C++/CX
- WPFはC++/CLI (C++マネージド拡張)
C++/CLI, C++/CX, WRL, C++/WinRT違いメモ
↑記事では、C++/CLIはグルー言語として使えると書いてある。
確かにC++ネイティブをC#から呼ぶときに、ラッパーとして使ったことがある。
そのとき参考にしたサイト↓
C#から、C++の関数の実行(クラス)
WinFormからWPF/UWPへの移行は大変?
たやすくはない。しかし得るものも多い。
よく見るのは、XAMLの学習コストが高いからWinFormのままにしておけという引き止め意見。
UWPは"Xbox、HoloLens、IoT、または Surface Hub のサポート"らしいけど、そんなに手広くやるつもりもない。
OpenCVなんかは、OpenCvSharpに比べて参考サイトが多いから
画像処理をC++で書いてC#から使うときは、WPFのほうが障壁が少なそうなイメージ。
あと綺麗な画面が比較的つくりやすい。
すでにあるWPFアプリをマテリアルデザインにする
クロスプラットフォーム開発について
C-SHARP
C#だったらXamarin(Xamarin.Forms?)、Uno Platform、あと新しいMAUI
Xamarin は、.NET を使用して、iOS、Android、Windows 向けの最新で高性能なアプリケーションをビルドするためのオープンソースのプラットフォームです。
Unoプラットフォームは、UWPベースのコード(C#およびXAML)をiOS、Android、およびWebAssemblyで実行できるようにするユニバーサルWindowsプラットフォームブリッジです。
マルチプラットフォームのネイティブUI
モバイルとデスクトップ全体の複数のデバイスにデプロイ
単一のプロジェクト、単一のコードベースを使用
Xamarin.Forms進化
.NET 6
つまり・・・
Xamarin.FormsはMAUIに進化した。
WebAssemblyに対応しているのはUno Platformだけ。
WPFの参考記事を多数執筆されているokazukiさんによるUno Platformデモ
C# で湯婆婆を Windows アプリと WebAssembly 対応してみた(無駄に MVVM)
脱線してC++
Qtがデファクトスタンダードなんですかね。
できることが多すぎる・・・
Qtは、デスクトップ、組み込み、モバイル向けのクロスプラットフォームのアプリケーション開発フレームワークです。サポートされているプラットフォームには、Linux、OS X、Windows、VxWorks、QNX、Android、iOS、BlackBerry、SailfishOSなどがあります。
WebAssemblyにも対応
Qtを使って、デスクトップアプリ開発とWebAssemblyアプリ開発を同時に学ぼう
さらに脱線してPython
Qt + Python = デスクトップアプリケーションを作ることもできる
結論
MAUIを使います。
Visual Studio 2019での使い方を調べる
以上