次の方法で共有


取り扱い者

.NET マルチプラットフォーム アプリ UI (.NET MAUI) には、データの表示、アクションの開始、アクティビティの示し、コレクションの表示、データの選択などを行うために使用できるクロスプラットフォーム コントロールのコレクションが用意されています。 各コントロールには、コントロールを抽象化するインターフェイス表現があります。 これらのインターフェイスを実装するクロスプラットフォーム コントロールは、仮想ビューと呼ばれます。 ハンドラー これらの仮想ビューを各プラットフォーム上のコントロールにマップします。これは、ネイティブ ビューと呼ばれます。 ハンドラーは、基になるネイティブ ビューをインスタンス化し、クロスプラットフォーム コントロール API をネイティブ ビュー API にマッピングする役割も担います。 たとえば、iOS では、ハンドラーによって .NET MAUI Button が iOS UIButtonにマップされます。 Android では、ButtonMaterialButtonにマップされます。

ボタン ハンドラーのアーキテクチャ。

.NET MAUI ハンドラーは、ButtonIButton など、コントロール固有のインターフェイスを介してアクセスされます。 これにより、クロスプラットフォーム コントロールがハンドラーを参照する必要が回避され、ハンドラーがクロスプラットフォーム コントロールを参照する必要がなくなります。

各ハンドラー クラスは、PlatformView プロパティを使用してクロスプラットフォーム コントロールのネイティブ ビューを公開します。 このプロパティにアクセスして、ネイティブ ビュー プロパティの設定、ネイティブ ビュー メソッドの呼び出し、ネイティブ ビュー イベントのサブスクライブを行うことができます。 さらに、ハンドラーによって実装されるクロスプラットフォーム コントロールは、VirtualView プロパティを介して公開されます。

ネイティブ ビューによって各プラットフォームで実装が提供されるクロスプラットフォーム コントロールを作成する場合は、クロスプラットフォーム コントロール API をネイティブ ビュー API にマップするハンドラーを実装する必要があります。 詳細については、「ハンドラーを使用してカスタム コントロールを作成する」を参照してください。

また、ハンドラーをカスタマイズして、コントロールの API を通じて可能なカスタマイズを超えて、既存のクロスプラットフォーム コントロールの外観と動作を強化することもできます。 このハンドラーのカスタマイズにより、クロスプラットフォーム コントロールのネイティブ ビューが変更されます。 ハンドラーはグローバルであり、コントロールのハンドラーをカスタマイズすると、同じ種類のすべてのコントロールがアプリでカスタマイズされます。 詳細については、「ハンドラーを使用して .NET MAUI コントロールをカスタマイズするを参照してください。

マッパー

.NET MAUI ハンドラーの主な概念は、マッパーです。 各ハンドラーは、通常、クロスプラットフォーム コントロールの API をネイティブ ビューの API にマップする、プロパティ マッパー(場合によっては コマンド マッパー) を提供します。

プロパティ マッパー は、クロスプラットフォーム コントロールでプロパティの変更が発生したときに実行するアクションを定義します。 これは、クロスプラットフォーム コントロールのプロパティを関連する Actions にマップする Dictionary です。 その後、各プラットフォーム ハンドラーは、ネイティブ ビュー API を操作する Actions の実装を提供します。 これにより、クロスプラットフォーム コントロールでプロパティが設定されると、基になるネイティブ ビューが必要に応じて更新されます。

コマンド マッパー は、クロスプラットフォーム コントロールがネイティブ ビューにコマンドを送信するときに実行するアクションを定義します。 プロパティ マッパーに似ていますが、追加のデータを渡すことができます。 このコンテキストのコマンドは、ICommand 実装を意味するものではありません。 代わりに、コマンドは単なる命令であり、必要に応じてそのデータがネイティブ ビューに送信されます。 コマンド マッパーは、クロスプラットフォーム コントロールのコマンドを関連するアクションにマップする Dictionary です。 各ハンドラーは、ネイティブ ビュー API を操作する Actions の実装を提供します。 これにより、クロスプラットフォーム コントロールがコマンドをネイティブ ビューに送信すると、必要に応じてネイティブ ビューが更新されます。 たとえば、ScrollView がスクロールされると、ScrollViewHandler はコマンド マッパーを使用して、スクロール位置引数を受け入れる Action を呼び出します。 次に、アクションは、その位置までスクロールするように基になるネイティブ ビューに指示します。

ネイティブ ビューを更新するために マッパー を使用する利点は、ネイティブ ビューをクロスプラットフォーム コントロールから切り離すことができる点です。 これにより、クロスプラットフォーム コントロール イベントのサブスクライブとサブスクライブ解除をネイティブ ビューで行う必要がなくなります。 また、サブクラス化せずにマッパーを変更できるため、簡単にカスタマイズできます。

ハンドラーのライフサイクル

すべてのハンドラー ベースの .NET MAUI コントロールは、次の 2 つのハンドラー ライフサイクル イベントをサポートします。

  • HandlerChanging は、クロスプラットフォーム コントロール用に新しいハンドラーが作成されようとしているとき、および既存のハンドラーがクロスプラットフォーム コントロールから削除されるときに発生します。 このイベントに付随する HandlerChangingEventArgs オブジェクトには、IElementHandler型の NewHandler プロパティと OldHandler プロパティがあります。 NewHandler プロパティが nullされていない場合、イベントはクロスプラットフォーム コントロール用に新しいハンドラーが作成されようとしていることを示します。 OldHandler プロパティが nullされていない場合、イベントは、既存のネイティブ コントロールがクロスプラットフォーム コントロールから削除されようとしていることを示します。そのため、ネイティブ イベントはすべて未接続にし、その他のクリーンアップを実行する必要があります。
  • HandlerChanged は、クロスプラットフォーム コントロールのハンドラーが作成された後に発生します。 このイベントは、クロスプラットフォーム コントロールを実装するネイティブ コントロールが使用可能であり、クロスプラットフォーム コントロールに設定されているすべてのプロパティ値がネイティブ コントロールに適用されていることを示します。

手記

HandlerChanging イベントは、HandlerChanged イベントの前にクロスプラットフォーム コントロールで発生します。

これらのイベントに加えて、各クロスプラットフォーム コントロールには、HandlerChanging イベントが発生したときに呼び出されるオーバーライド可能な OnHandlerChanging メソッドと、HandlerChanged イベントが発生したときに呼び出される OnHandlerChanged メソッドもあります。

ハンドラーの表示

次の表に、.NET MAUI でビューを実装する型を示します。

ビュー インターフェイス ハンドラ プロパティ マッパー コマンド マッパー
ActivityIndicator IActivityIndicator ActivityIndicatorHandler Mapper CommandMapper
BlazorWebView IBlazorWebView BlazorWebViewHandler BlazorWebViewMapper
Border IBorderView BorderHandler Mapper CommandMapper
BoxView IShapeViewIShape ShapeViewHandler Mapper CommandMapper
Button IButton ButtonHandler ImageButtonMapperTextButtonMapperMapper CommandMapper
CarouselView CarouselViewHandler Mapper
Cell CellRenderer Mapper CommandMapper
CheckBox ICheckBox CheckBoxHandler Mapper CommandMapper
CollectionView CollectionViewHandler <Mapper
ContentView IContentView ContentViewHandler Mapper CommandMapper
DatePicker IDatePicker DatePickerHandler Mapper CommandMapper
Editor IEditor EditorHandler Mapper CommandMapper
Ellipse IShape ShapeViewHandler Mapper CommandMapper
Entry IEntry EntryHandler Mapper CommandMapper
EntryCell EntryCellRenderer Mapper CommandMapper
Frame FrameRenderer Mapper CommandMapper
GraphicsView IGraphicsView GraphicsViewHandler Mapper CommandMapper
Image IImage ImageHandler Mapper CommandMapper
ImageButton IImageButton ImageButtonHandler ImageMapperMapper
ImageCell ImageCellRenderer Mapper CommandMapper
IndicatorView IIndicatorView IndicatorViewHandler Mapper CommandMapper
Label ILabel LabelHandler Mapper CommandMapper
Line IShape LineHandler Mapper CommandMapper
ListView ListViewRenderer Mapper CommandMapper
Map IMap MapHandler Mapper CommandMapper
Path IShape PathHandler Mapper CommandMapper
Picker IPicker PickerHandler Mapper CommandMapper
Polygon IShape PolygonHandler Mapper CommandMapper
Polyline IShape PolylineHandler Mapper CommandMapper
ProgressBar IProgress ProgressBarHandler Mapper CommandMapper
RadioButton IRadioButton RadioButtonHandler Mapper CommandMapper
Rectangle IShape RectangleHandler Mapper CommandMapper
RefreshView IRefreshView RefreshViewHandler Mapper CommandMapper
RoundRectangle IShape RoundRectangleHandler Mapper CommandMapper
ScrollView IScrollView ScrollViewHandler Mapper CommandMapper
SearchBar ISearchBar SearchBarHandler Mapper CommandMapper
Slider ISlider SliderHandler Mapper CommandMapper
Stepper IStepper StepperHandler Mapper CommandMapper
SwipeView ISwipeView SwipeViewHandler Mapper CommandMapper
Switch ISwitch SwitchHandler Mapper CommandMapper
SwitchCell SwitchCellRenderer Mapper CommandMapper
TableView TableViewRenderer Mapper CommandMapper
TextCell TextCellRenderer Mapper CommandMapper
TimePicker ITimePicker TimePickerHandler Mapper CommandMapper
ViewCell ViewCellRenderer Mapper CommandMapper
WebView IWebView WebViewHandler Mapper CommandMapper

ページ ハンドラー

次の表に、.NET MAUI でページを実装する型を示します。

ページ Android ハンドラー iOS/Mac Catalyst ハンドラー Windows ハンドラー プロパティ マッパー コマンド マッパー
ContentPage PageHandler PageHandler PageHandler Mapper CommandMapper
FlyoutPage FlyoutViewHandler PhoneFlyoutPageRenderer FlyoutViewHandler Mapper CommandMapper
NavigationPage NavigationViewHandler NavigationRenderer NavigationViewHandler Mapper CommandMapper
TabbedPage TabbedViewHandler タブ付きレンダラー (TabbedRenderer) TabbedViewHandler Mapper CommandMapper
Shell ShellHandler シェルレンダラー ShellRenderer Mapper CommandMapper