handler

.NET Multi-platform App UI (.NET MAUI) bietet eine Sammlung plattformübergreifender Steuerelemente, die zum Anzeigen von Daten, Initiieren von Aktionen, Anzeigen von Aktivitäten, Anzeigen von Sammlungen, Auswählen von Daten und mehr verwendet werden können. Jedes Steuerelement verfügt über eine Schnittstellendarstellung, die das Steuerelement abstrahiert. Plattformübergreifende Steuerelemente, die diese Schnittstellen implementieren, werden als virtuelle Ansichten bezeichnet. Handler ordnen diese virtuellen Ansichten Steuerelementen auf jeder Plattform zu, die als systemeigene Ansichten bezeichnet werden. Handler sind auch für die Instanziierung der zugrunde liegenden nativen Ansicht und das Zuordnen der plattformübergreifenden Steuerelement-API zur nativen Ansichts-API verantwortlich. Beispielsweise ordnet ein Handler unter iOS ein .NET MAUI Button einem iOS UIButtonzu. Unter Android ist die Button Zuordnung zu einem AppCompatButton:

Button handler architecture.

Auf .NET MAUI-Handler wird über ihre steuerelementspezifische Schnittstelle zugegriffen, z IButton . B. für eine Button. Dadurch wird verhindert, dass das plattformübergreifende Steuerelement auf den Handler verweisen muss, und der Handler muss auf das plattformübergreifende Steuerelement verweisen.

Jede Handlerklasse macht die systemeigene Ansicht für das plattformübergreifende Steuerelement über seine PlatformView Eigenschaft verfügbar. Auf diese Eigenschaft kann zugegriffen werden, um systemeigene Ansichtseigenschaften festzulegen, systemeigene Ansichtsmethoden aufzurufen und systemeigene Ansichtsereignisse zu abonnieren. Darüber hinaus wird das plattformübergreifende Steuerelement, das vom Handler implementiert wird, über seine VirtualView Eigenschaft verfügbar gemacht.

Wenn Sie ein plattformübergreifendes Steuerelement erstellen, dessen Implementierung auf jeder Plattform durch systemeigene Ansichten bereitgestellt wird, sollten Sie einen Handler implementieren, der die plattformübergreifende Steuerelement-API den systemeigenen Ansichts-APIs zuordnet. Weitere Informationen finden Sie unter Erstellen von benutzerdefinierten Steuerelementen mit Handlern.

Sie können Handler auch anpassen, um die Darstellung und das Verhalten vorhandener plattformübergreifender Steuerelemente über die Anpassung hinaus zu erweitern, die über die API des Steuerelements möglich ist. Diese Handleranpassung ändert die systemeigenen Ansichten für das plattformübergreifende Steuerelement. Handler sind global und das Anpassen eines Handlers für ein Steuerelement führt dazu, dass alle Steuerelemente desselben Typs in Ihrer App angepasst werden. Weitere Informationen finden Sie unter Anpassen von .NET MAUI-Steuerelementen mit Handlern.

Mappers

Ein Schlüsselkonzept von .NET MAUI-Handlern ist Mapper. Jeder Handler stellt in der Regel einen Eigenschaftenzuordnungsprogramm und manchmal eine Befehlszuordnung bereit, die die API des plattformübergreifenden Steuerelements der api der nativen Ansicht zuordnet.

Eine Eigenschaftenzuordnung definiert, welche Aktionen ausgeführt werden sollen, wenn eine Eigenschaftsänderung im plattformübergreifenden Steuerelement erfolgt. Es ist ein Dictionary Element, das die Eigenschaften des plattformübergreifenden Steuerelements den zugehörigen Aktionen zuordnet. Jeder Plattformhandler stellt dann Implementierungen der Aktionen bereit, die die systemeigene Ansichts-API bearbeiten. Dadurch wird sichergestellt, dass die zugrunde liegende native Ansicht bei Bedarf aktualisiert wird, wenn eine Eigenschaft für ein plattformübergreifendes Steuerelement festgelegt wird.

Eine Befehlszuordnung definiert, welche Aktionen ausgeführt werden sollen, wenn das plattformübergreifende Steuerelement Befehle an systemeigene Ansichten sendet. Sie ähneln Eigenschaftenzuordnungen, ermöglichen jedoch die Übergabe zusätzlicher Daten. Ein Befehl in diesem Kontext bedeutet ICommand keine Implementierung. Stattdessen ist ein Befehl nur eine Anweisung und optional seine Daten, die an eine systemeigene Ansicht gesendet werden. Die Befehlszuordnung ist eine Dictionary , die den Befehl des plattformübergreifenden Steuerelements den zugehörigen Aktionen zuordnet. Jeder Handler stellt dann Implementierungen der Aktionen bereit, die die systemeigene Ansichts-API bearbeiten. Dadurch wird sichergestellt, dass die systemeigene Ansicht aktualisiert wird, wenn ein plattformübergreifendes Steuerelement einen Befehl an die systemeigene Ansicht sendet. Wenn z. B. ein ScrollView Bildlauf durchgeführt wird, wird eine ScrollViewHandler Befehlszuordnung verwendet, um eine Aktion aufzurufen, die ein Bildlaufpositionsargument akzeptiert. Die Aktion weist dann die zugrunde liegende systemeigene Ansicht an, zu dieser Position zu scrollen.

Der Vorteil der Verwendung von Mappern zum Aktualisieren nativer Ansichten besteht darin, dass systemeigene Ansichten von plattformübergreifenden Steuerelementen entkoppelt werden können. Dadurch wird die Notwendigkeit für systemeigene Ansichten zum Abonnieren und Abmelden von plattformübergreifenden Steuerelementereignissen entfernt. Es ermöglicht auch eine einfache Anpassung, da Mapper ohne Unterklassen geändert werden können.

Handlerlebenszyklus

Alle handlerbasierten .NET MAUI-Steuerelemente unterstützen zwei Handlerlebenszyklusereignisse:

  • HandlerChanging wird ausgelöst, wenn ein neuer Handler für ein plattformübergreifendes Steuerelement erstellt werden soll und wenn ein vorhandener Handler aus einem plattformübergreifenden Steuerelement entfernt werden soll. Das HandlerChangingEventArgs Objekt, das dieses Ereignis begleitet, hat NewHandler und OldHandler Eigenschaften vom Typ IElementHandler. Wenn die NewHandler Eigenschaft nicht nullvorhanden ist, gibt das Ereignis an, dass ein neuer Handler für ein plattformübergreifendes Steuerelement erstellt werden soll. Wenn die OldHandler Eigenschaft nicht nullist, gibt das Ereignis an, dass das vorhandene systemeigene Steuerelement aus dem plattformübergreifenden Steuerelement entfernt wird, und daher sollten alle systemeigenen Ereignisse entwirt und andere sauber up ausgeführt werden.
  • HandlerChanged wird ausgelöst, nachdem der Handler für ein plattformübergreifendes Steuerelement erstellt wurde. Dieses Ereignis gibt an, dass das systemeigene Steuerelement, das das plattformübergreifende Steuerelement implementiert, verfügbar ist und alle auf dem plattformübergreifenden Steuerelement festgelegten Eigenschaftswerte auf das systemeigene Steuerelement angewendet wurden.

Hinweis

Das HandlerChanging Ereignis wird auf einem plattformübergreifenden Steuerelement vor dem HandlerChanged Ereignis ausgelöst.

Zusätzlich zu diesen Ereignissen verfügt jedes plattformübergreifende Steuerelement auch über eine überschreibbare OnHandlerChanging Methode, die beim Auslösen des HandlerChanging Ereignisses aufgerufen wird, und eine OnHandlerChanged Methode, die aufgerufen wird, wenn das HandlerChanged Ereignis ausgelöst wird.

Anzeigen von Handlern

In der folgenden Tabelle sind die Typen aufgeführt, die Ansichten in .NET MAUI implementieren:

Ansicht Schnittstelle Handler Property Mapper Befehlszuordnung
ActivityIndicator IActivityIndicator ActivityIndicatorHandler Mapper CommandMapper
BlazorWebView IBlazorWebView BlazorWebViewHandler BlazorWebViewMapper
Border IBorderView BorderHandler Mapper CommandMapper
BoxView IShapeView, IShape ShapeViewHandler Mapper CommandMapper
Button IButton ButtonHandler ImageButtonMapper, TextButtonMapperMapper 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 ImageMapper, Mapper
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

Seitenhandler

In der folgenden Tabelle sind die Typen aufgeführt, die Seiten in .NET MAUI implementieren:

Seite Android-Handler iOS/Mac Catalyst Handler Windows-Handler Property Mapper Befehlszuordnung
ContentPage PageHandler PageHandler PageHandler Mapper CommandMapper
FlyoutPage FlyoutViewHandler Telefon FlyoutPageRenderer FlyoutViewHandler Mapper CommandMapper
NavigationPage NavigationViewHandler NavigationRenderer NavigationViewHandler Mapper CommandMapper
TabbedPage TabbedViewHandler TabbedRenderer TabbedViewHandler Mapper CommandMapper
Shell ShellHandler ShellRenderer ShellRenderer Mapper CommandMapper