Condividi tramite


Gestori

L'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI) offre una raccolta di controlli multipiattaforma che possono essere usati per visualizzare i dati, avviare azioni, indicare attività, visualizzare raccolte, selezionare dati e altro ancora. Ogni controllo ha una rappresentazione dell'interfaccia che astrae il controllo. I controlli multipiattaforma che implementano queste interfacce sono noti come viste virtuali . Gestori vanno a mappare queste visualizzazioni virtuali ai controlli su ogni piattaforma, noti come viste native. I gestori sono anche responsabili dell'instanziazione della vista nativa sottostante e del mappando l'API del controllo multipiattaforma all'API della vista nativa. Ad esempio, in iOS un gestore degli eventi esegue il mapping di un .NET MAUI Button a un iOS UIButton. In Android, il Button viene mappato a un MaterialButton:

architettura del gestore pulsante .

I gestori MAUI .NET sono accessibili tramite l'interfaccia specifica del controllo, ad esempio IButton per un Button. Evitando che il controllo multipiattaforma debba fare riferimento al suo gestore, e viceversa.

Ogni classe handler espone la vista nativa per il controllo multipiattaforma tramite la proprietà PlatformView. È possibile accedere a questa proprietà per impostare le proprietà della visualizzazione nativa, richiamare i metodi di visualizzazione nativa e sottoscrivere eventi di visualizzazione nativa. Inoltre, il controllo multipiattaforma implementato dal gestore viene esposto tramite la relativa proprietà VirtualView.

Quando si crea un controllo multipiattaforma la cui implementazione viene fornita in ogni piattaforma dalle visualizzazioni native, è necessario implementare un gestore che esegue il mapping dell'API di controllo multipiattaforma alle API di visualizzazione nativa. Per altre informazioni, vedere Creare controlli personalizzati con gestori.

È anche possibile personalizzare i gestori per aumentare l'aspetto e il comportamento dei controlli multipiattaforma esistenti oltre la personalizzazione possibile tramite l'API del controllo. Questa personalizzazione del gestore modifica le visualizzazioni native per il controllo multipiattaforma. I gestori sono globali e la personalizzazione di un gestore per un controllo comporterà la personalizzazione di tutti i controlli dello stesso tipo nell'app. Per ulteriori informazioni, consultare Personalizzare i controlli .NET MAUI con gestori.

Mapper

Un concetto chiave dei gestori .NET MAUI è il mapper. Ogni gestore fornisce in genere un mapper di proprietà e talvolta un mapper di comandi , che mappa l'API del controllo multipiattaforma all'API di visualizzazione nativa.

Un mapper di proprietà definisce quali azioni eseguire quando si verifica un cambiamento di proprietà nel controllo multipiattaforma. Si tratta di un Dictionary che mappa le proprietà del controllo multipiattaforma alle loro azioni associate. Ogni gestore della piattaforma fornisce quindi implementazioni delle azioni, che modificano l'API di visualizzazione nativa. In questo modo, quando una proprietà viene impostata su un controllo multipiattaforma, la visualizzazione nativa sottostante viene aggiornata in base alle esigenze.

Un mappatore di comandi definisce quali azioni intraprendere quando il controllo multipiattaforma invia comandi alle visualizzazioni native. Sono simili alle mappature delle proprietà, ma consentono di passare dati aggiuntivi. Un comando in questo contesto non significa un'implementazione ICommand. Invece, un comando è solo un'istruzione, e, facoltativamente, i suoi dati, che vengono inviati a una visualizzazione nativa. Il mapper di comando è un Dictionary che mappa il comando del controllo multipiattaforma alle azioni associate. Ogni gestore fornisce quindi implementazioni delle azioni, che modificano l'API di visualizzazione nativa. In questo modo, quando un controllo multipiattaforma invia un comando alla visualizzazione nativa, la visualizzazione nativa viene aggiornata in base alle esigenze. Ad esempio, quando si scorre un ScrollView, il ScrollViewHandler usa un mappatore di comandi per richiamare un'Azione che accetta un argomento di posizione di scorrimento. L'azione indica quindi alla visualizzazione nativa sottostante di scorrere fino a tale posizione.

Il vantaggio dell'uso di mapper per aggiornare le visualizzazioni native è che le visualizzazioni native possono essere disaccoppiate dai controlli tra piattaforme. In questo modo viene eliminata la necessità per le visualizzazioni native di iscriversi e disiscriversi dagli eventi di controllo multipiattaforma. Permette anche una semplice personalizzazione perché i mapper possono essere modificati senza la necessità di creare sottoclassi.

Ciclo di vita del gestore

Tutti i controlli .NET MAUI basati su gestore eventi supportano due eventi del ciclo di vita del gestore eventi:

  • HandlerChanging viene generato quando un nuovo gestore sta per essere creato per un controllo multipiattaforma e quando un gestore esistente sta per essere rimosso da un controllo multipiattaforma. L'oggetto HandlerChangingEventArgs che accompagna questo evento ha le proprietà NewHandler e OldHandler del tipo IElementHandler. Quando la proprietà NewHandler non è null, l'evento indica che un nuovo gestore sta per essere creato per un controllo compatibile tra piattaforme. Quando la proprietà OldHandler non è null, l'evento indica che il controllo nativo esistente sta per essere rimosso dal controllo multipiattaforma e pertanto eventuali eventi nativi devono essere scollegati e altre operazioni di pulizia eseguite.
  • HandlerChanged viene generato dopo che il gestore per un controllo su più piattaforme è stato creato. Questo evento indica che il controllo nativo che implementa il controllo multipiattaforma è disponibile e che tutti i valori delle proprietà impostati nel controllo multipiattaforma sono stati applicati al controllo nativo.

Nota

L'evento HandlerChanging viene generato su controllo multipiattaforma prima dell'evento HandlerChanged.

Oltre a questi eventi, ogni controllo multipiattaforma ha anche un metodo di OnHandlerChanging sottoponibile a override richiamato quando viene generato l'evento HandlerChanging e un metodo OnHandlerChanged richiamato quando viene generato l'evento HandlerChanged.

Visualizzare i gestori di eventi

Nella tabella seguente sono elencati i tipi che implementano le viste in .NET MAUI:

Visualizza Interfaccia Gestore Mappatore di proprietà Mappatore di comandi
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

Gestori di pagina

La tabella seguente elenca i tipi che implementano le pagine in .NET MAUI:

Pagina Gestore Android Gestore Catalyst iOS/Mac Gestore di Windows Mappatore di proprietà Mappatore dei comandi
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