Freigeben über


Bearbeiter

.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 Ansichtenbezeichnet. Handler ordnen diese virtuellen Ansichten den Steuerelementen auf jeder Plattform zu, die als systemeigene Ansichtenbezeichnet 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. Bei iOS ordnet ein Handler beispielsweise eine .NET MAUI-Button einem iOS-UIButtonzu. Unter Android wird die Button einem MaterialButtonzugeordnet:

Architektur des Schaltflächenhandlers.

Auf .NET MAUI-Handler wird über die steuerelementspezifische Schnittstelle zugegriffen, z. B. IButton für eine Button. Dies verhindert, dass das plattformübergreifende Steuerelement seinen Handler referenzieren muss und umgekehrt.

Jede Handlerklasse macht die systemeigene Ansicht für das plattformübergreifende Steuerelement über die 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 Anpassung des Handlers modifiziert die nativen 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.

Kartographen

Ein Schlüsselkonzept von .NET MAUI-Handlern sind Mappers. Jeder Handler stellt in der Regel eine Eigenschaften-Zuordnungund manchmal eine Befehlszuordnungbereit, die die API des plattformübergreifenden Steuerelements mit der API der nativen Ansicht abgleicht.

Ein Eigenschaftszuordner bestimmt, welche Aktionen auszuführen sind, wenn eine Eigenschaftsänderung im plattformunabhängigen Steuerelement erfolgt. Es ist eine Dictionary, die die Eigenschaften des plattformübergreifenden Steuerelements den zugehörigen Aktionen zuordnet. Jeder Plattform-Handler bietet dann Implementierungen der Aktionen, die die native View-API manipulieren. Dadurch wird sichergestellt, dass die zugrunde liegende native Ansicht bei Bedarf aktualisiert wird, wenn eine Eigenschaft für ein plattformübergreifendes Steuerelement festgelegt wird.

Ein -Befehlszuordner definiert, welche Aktionen ausgeführt werden sollen, wenn das plattformübergreifende Kontrollelement Befehle an native Ansichten sendet. Sie ähneln Eigenschaftsabbildungen, ermöglichen jedoch die Übergabe zusätzlicher Daten. Ein Befehl in diesem Kontext bedeutet nicht eine „ICommand Implementierung“. Stattdessen ist ein Befehl nur eine Anweisung und optional seine Daten, die an eine systemeigene Ansicht gesendet werden. Der Befehlsmapper ist eine Dictionary, die das Kommando des plattformübergreifenden Steuerelements den zugehörigen Aktionen zuordnet. Jeder Handler stellt dann Implementierungen der Aktionen bereit, die die native View-API bearbeiten. Dadurch wird sichergestellt, dass die systemeigene Ansicht aktualisiert wird, wenn ein plattformübergreifendes Steuerelement einen Befehl an die systemeigene Ansicht sendet. Wenn beispielsweise ein ScrollView gescrollt wird, verwendet die ScrollViewHandler einen Befehlsmapper, um eine Aktion zu initiieren, die eine Bildlaufposition als Argument akzeptiert. Die Aktion weist dann die zugrunde liegende native Ansicht an, zu dieser Position zu scrollen.

Der Vorteil der Verwendung von -Mappern zur Aktualisierung nativer Ansichten besteht darin, dass native 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 die Erstellung von Unterklassen angepasst 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, verfügt über die Eigenschaften NewHandler und OldHandler vom Typ IElementHandler. Wenn die NewHandler-Eigenschaft nicht nullist, gibt das Ereignis an, dass ein neuer Handler für ein plattformübergreifendes Steuerelement erstellt werden soll. Wenn die OldHandler Eigenschaft nicht nullist, zeigt das Ereignis an, dass das vorhandene systemeigene Steuerelement vom plattformübergreifenden Steuerelement entfernt wird, und dementsprechend sollten alle systemeigenen Ereignisse entfernt und andere Bereinigungen durchgefü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.

Anmerkung

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 aufgerufen wird, wenn das HandlerChanging-Ereignis ausgelöst wird, und eine OnHandlerChanged-Methode, die aufgerufen wird, wenn das HandlerChanged-Ereignis ausgelöst wird.

Handler anzeigen

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

Ansehen Schnittstelle Handler Property Mapper Befehlsabbildung
ActivityIndicator IActivityIndicator ActivityIndicatorHandler Mapper CommandMapper
BlazorWebView IBlazorWebView BlazorWebViewHandler BlazorWebViewMapper
Border IBorderView BorderHandler Mapper CommandMapper
BoxView IShapeView, IShape ShapeViewHandler Mapper CommandMapper
Button IButton ButtonHandler ImageButtonMapper, TextButtonMapper, Mapper 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 Befehlszuordnungstool
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 ShellRenderer Mapper CommandMapper