導入
Raspberry Pi上でMonoを使用してC#(Windows Forms)アプリを動作させた際、デザイン面で以下のような挙動に悩まされました。
- Borderの色を何に指定しても、すべて黒色で描画される。
- カスタムコントロールで実装した「角丸」が無視され、四角形のままになる。
原因:Monoの描画エンジン(libgdiplus)の限界
この問題の主な原因は、MonoがLinux上で描画を行う際に使用するlibgdiplusと、Linuxの画面システム(X11)の互換性にあります。
- 互換性の欠如: Windows FormsはWindows OS固有のGDI+に依存しており、Monoによる変換では高度な視覚スタイルやプロパティ(特にBorderのレンダリング)が完全には再現されません。
- 描画命令の単純化: 複雑な描画(角丸のリージョン処理など)がOS側の制限でデフォルト設定(黒色・矩形)にリセットされてしまうことがあります。
根本的な解決策:Avalonia UI への移行
UIの自由度とクロスプラットフォームでの完全な再現性を求め、**Avalonia UI(.NET 6/8以降)**へ移行することにしました。
なぜ Avalonia UI なのか?
| 比較項目 | Mono (Windows Forms) | Avalonia UI |
| 描画方式 | OSの描画機能に依存 | 独自のレンダリングエンジン (Skia) |
| 見た目 | OS(Linux/X11)に左右される | 全プラットフォームで同一 |
| 角丸・装飾 | 実装が困難(バグが出やすい) | CornerRadius等で標準対応 |
| 開発手法 | プロパティ・コード | XAMLベース(モダンな設計) |




コメント