Hanterare
.NET Multi-platform App UI (.NET MAUI) tillhandahåller en samling plattformsoberoende kontroller som kan användas för att visa data, initiera åtgärder, indikera aktivitet, visa samlingar, välja data med mera. Varje kontroll har en gränssnittsrepresentation som abstraherar kontrollen. Plattformsoberoende kontroller som implementerar dessa gränssnitt kallas virtuella vyer.
-hanterare mappa dessa virtuella vyer till kontroller på varje plattform, som kallas inbyggda vyer. Hanterare ansvarar också för att instansiera den underliggande interna vyn och mappa api:et för plattformsoberoende kontroll till api:et för intern vy. I iOS mappar till exempel en hanterare en .NET MAUI-Button till en iOS-UIButton
. På Android mappas Button till en MaterialButton
:
.NET MAUI-hanterare nås via deras kontrollspecifika gränssnitt, till exempel IButton
för en Button. Detta förhindrar att plattformsoberoende kontroll måste referera till dess hanterare och att hanteraren måste referera till plattformsoberoende kontroll.
Varje hanterarklass exponerar den interna vyn för plattformsoberoende kontroll via dess PlatformView
egenskap. Den här egenskapen kan nås för att ange inbyggda vyegenskaper, anropa interna vymetoder och prenumerera på interna vyhändelser. Dessutom exponeras, via dess egenskap VirtualView
, den plattformsoberoende kontroll som implementeras av hanteraren.
När du skapar en plattformsoberoende kontroll vars implementering tillhandahålls på varje plattform av inbyggda vyer bör du implementera en hanterare som mappar api:et för plattformsoberoende kontroll till API:erna för intern vy. Mer information finns i Skapa anpassade kontroller med hanterare.
Du kan också anpassa hanterare för att öka utseendet och beteendet för befintliga plattformsoberoende kontroller utöver den anpassning som är möjlig via kontrollens API. Den här hanteraranpassningen ändrar de inbyggda vyerna för plattformsoberoende kontroll. Hanterare är globala och anpassning av en hanterare för en kontroll resulterar i att alla kontroller av samma typ anpassas i din app. Mer information finns i Anpassa .NET MAUI-kontroller med hanterare.
Kartografer
Ett nyckelbegrepp för .NET MAUI-hanterare är mappare. Varje hanterare tillhandahåller vanligtvis en egenskapsmappare, och ibland en kommandomappare, som mappar plattformsoberoende kontrollens API till den interna vyns API.
En egenskapsmappare definierar vilka åtgärder som ska utföras när en egenskapsändring sker i plattformsoberoende kontroll. Det är en Dictionary
som kopplar plattformsoberoende kontrollegenskaper till deras associerade åtgärder. Varje plattformshanterare tillhandahåller sedan implementeringar av åtgärderna, som manipulerar api:et för den interna vyn. Detta säkerställer att när en egenskap anges på en kontroll som är plattformsoberoende, uppdateras den underliggande ursprungliga vyn efter behov.
En kommandomappare definierar vilka åtgärder som ska utföras när plattformsoberoende kontroll skickar kommandon till inbyggda vyer. De liknar egenskapskartläggare, men möjliggör att ytterligare data kan överföras. Ett kommando i den här kontexten innebär inte en ICommand implementering. I stället är ett kommando bara en instruktion, och eventuellt dess data, som skickas till en intern vy. Kommandomapparen är en Dictionary
som mappar den plattformsoberoende kontrollens kommandon till sina associerade åtgärder. Varje hanterare tillhandahåller sedan implementeringar av åtgärderna, som manipulerar api:et för den interna vyn. Detta säkerställer att när en plattformsoberoende kontroll skickar ett kommando till den interna vyn uppdateras den interna vyn efter behov. När en ScrollView till exempel rullas använder ScrollViewHandler
en kommandomappare för att anropa en åtgärd som accepterar ett rullningspositionsargument. Åtgärden instruerar sedan den underliggande inbyggda vyn att rulla till den positionen.
Fördelen med att använda mappare för att uppdatera interna vyer är att inbyggda vyer kan frikopplas från plattformsoberoende kontroller. Detta tar bort behovet av inbyggda vyer för att prenumerera på och avbryta prenumerationen på plattformsoberoende kontrollhändelser. Det möjliggör också enkel anpassning eftersom mappare kan ändras utan underklassificering.
Livscykel för hanterare
Alla hanterarbaserade .NET MAUI-kontroller stöder två livscykelhändelser för hanterare:
-
HandlerChanging
genereras när en ny hanterare ska skapas för en plattformsoberoende kontroll och när en befintlig hanterare är på väg att tas bort från en plattformsoberoende kontroll. DetHandlerChangingEventArgs
objekt som medföljer den här händelsen harNewHandler
ochOldHandler
egenskaper av typenIElementHandler
. När egenskapenNewHandler
inte ärnull
anger händelsen att en ny hanterare håller på att skapas för en plattformsoberoende kontroll. När egenskapenOldHandler
inte ärnull
anger händelsen att den befintliga interna kontrollen är på väg att tas bort från plattformsoberoende kontroll, och därför bör inbyggda händelser kopplas från och annan rensning utföras. -
HandlerChanged
aktiveras när hanteraren för en plattformsoberoende kontroll har skapats. Den här händelsen anger att den interna kontrollen som implementerar plattformsoberoende kontroll är tillgänglig och att alla egenskapsvärden som anges på plattformsoberoende kontroll har tillämpats på den interna kontrollen.
Obs
Händelsen HandlerChanging
aktiveras på en plattformsoberoende kontroll före HandlerChanged
händelsen.
Utöver dessa händelser har varje plattformsoberoende kontroll också en åsidosättningsbar OnHandlerChanging
metod som anropas när händelsen HandlerChanging
aktiveras och en OnHandlerChanged
metod som anropas när HandlerChanged
händelsen utlöses.
Visa hanterare
I följande tabell visas de typer som implementerar vyer i .NET MAUI:
Sidhantörer
I följande tabell visas de typer som implementerar sidor i .NET MAUI:
Sida | Android-hanterare | iOS/Mac Catalyst-hanterare | Windowshanterare | Egenskapsmappare | Kommandomappare |
---|---|---|---|---|---|
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 |