MS_XamarinForms - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

Xamarin.Forms

概要

  • XAML化された。

    • すると、流行らなくなる気がするんですが...。
    • Xamarin の Xam は XAML の XAM ではないが
      (Xamarin は、先頭の T を X(Ximian の X?)に置き換えた
      Tamarin の猿の名前に由来。)
  • React Native と同じアプローチ

    • 共通の画面定義体から、各種プラットフォーム向けの画面を生成する。
    • それぞれのプラットフォームが提供する UI パーツが使用される。

補足(2 つの Xamarin の違い): Xamarin には
大きく 2 系統あり、本ページは後者を扱っている。

Xamarin Native Xamarin.Forms
UI の書き方 プラットフォームごとに個別(iOS は Storyboard、Android は AXML) XAML で 1 回書く
生成物 各 OS のネイティブ UI 各 OS のネイティブ UI(レンダラーが変換)
共有できる範囲 ロジックのみ ロジック + UI
向く場面 OS ごとに作り込みたい 画面が共通でよい業務アプリ

「共通の画面定義体から各プラットフォーム向けの画面を生成」というのが
Xamarin.Forms の核であり、
Flutter(自前描画)とは方式が異なる点は押さえておきたい。

方式 代表
ネイティブ UI 変換型 Xamarin.Forms / React Native / .NET MAUI
独自レンダラ型(自前で全部描く) Flutter

前者は「OS の見た目に馴染む」が「OS 差の吸収に苦労する」、
後者は「全 OS で同じ見た目」だが「OS 標準から浮く」という
トレードオフになる。

詳細

レンダラーという仕組み

Xamarin.Forms の中核は カスタム レンダラーである。

  • Button(Forms の抽象コントロール)を、
  • iOS では UIButton、Android では android.widget.Button
  • レンダラーが変換する。

外観や挙動を変えたい場合は、このレンダラーを継承して差し替える。

移行メモ(最新化:Xamarin.Forms は .NET MAUI に置き換わった):

時期 出来事
2014 Xamarin.Forms 登場
2022-05 .NET MAUI が正式リリース(Xamarin.Forms の後継)
2024-05-01 Xamarin(Forms 含む)のサポートが終了

移行時に最も影響が大きいのは、上記のレンダラーが
「ハンドラー」に置き換わった
点である。

Xamarin.Forms .NET MAUI
仕組み カスタム レンダラー(継承ベース) ハンドラー(インターフェイス ベース)
結合 密(ViewRenderer<TView, TNativeView> を継承) 疎(PropertyMapper で個別に差し替え)
性能 レンダラーの生成コストが大きい 軽い

XAML・ViewModel はほぼそのまま流用できるが、
カスタム レンダラーを書いている箇所は書き直しになる。
移行コストの見積もりでは、この点を最初に確認したい。

参考

Microsoft Learn

Build Insider


Tags: 移行, .NET開発, Mono, UIサブシステム, WPF/Silverlight, XAML

⚠️ **GitHub.com Fallback** ⚠️