Partilhar via


Manipuladores

.NET Multi-platform App UI (.NET MAUI) fornece uma coleção de controles entre plataformas que podem ser usados para exibir dados, iniciar ações, indicar atividades, exibir coleções, selecionar dados e muito mais. Cada controle tem uma representação de interface que abstrai o controle. Os controlos de plataforma cruzada que implementam essas interfaces são conhecidos como vistas virtuais. manipulares mapeiam estas vistas virtuais para controlos em cada plataforma, que são conhecidas como vistas nativas . Os manipuladores também são responsáveis por instanciar a exibição nativa subjacente e mapear a API de controle entre plataformas para a API de exibição nativa. Por exemplo, no iOS, um manipulador mapeia um .NET MAUI Button para um iOS UIButton. No Android, o Button é mapeado para um MaterialButton:

Arquitetura do manipulador de botões.

Os manipuladores .NET MAUI são acessados por meio da sua interface específica de controlo, como IButton para um Button. Isso evita que o controle de plataforma cruzada tenha que fazer referência ao seu manipulador e o manipulador tenha que fazer referência ao controle de plataforma cruzada.

Cada classe de manipulador expõe a visualização nativa para o controlo de plataforma cruzada através da sua propriedade PlatformView. Essa propriedade pode ser acessada para definir propriedades de exibição nativas, invocar métodos de exibição nativos e assinar eventos de exibição nativa. Além disso, o controle multiplataforma implementado pelo manipulador é exposto por meio de sua propriedade VirtualView.

Ao criar um controle entre plataformas cuja implementação é fornecida em cada plataforma por exibições nativas, você deve implementar um manipulador que mapeie a API de controle entre plataformas para as APIs de exibição nativas. Para obter mais informações, consulte Criar controles personalizados com manipuladores.

Você também pode personalizar manipuladores para aumentar a aparência e o comportamento de controles existentes entre plataformas além da personalização possível por meio da API do controle. Essa personalização do manipulador modifica as exibições nativas para o controle entre plataformas. Os manipuladores são globais, e personalizar um manipulador para um controle resultará em todos os controles do mesmo tipo sendo personalizados em seu aplicativo. Para obter mais informações, consulte Personalizar controles .NET MAUI com manipuladores.

Mapeadores

Um conceito-chave dos manipuladores .NET MAUI são mapeadores. Cada manipulador normalmente fornece um mapeador de propriedades e, às vezes, um mapeador de comandos , que mapeia a API do controle de plataforma cruzada para a API da exibição nativa.

Um mapeador de propriedades define quais Ações devem ser executadas quando ocorre uma alteração de propriedade no controle entre plataformas. É um Dictionary que mapeia as propriedades do controle entre plataformas para suas Ações associadas. Cada manipulador de plataforma fornece implementações das Ações, que manipulam a API de exibição nativa. Isto assegura que, quando uma propriedade é definida num controlo multiplataforma, a vista nativa subjacente seja atualizada conforme o necessário.

Um mapeador de comandos define quais Ações devem ser executadas quando o controle de plataforma cruzada envia comandos para exibições nativas. Eles são semelhantes aos mapeadores de propriedades, mas permitem que dados adicionais sejam passados. Um comando neste contexto não significa uma implementação ICommand. Em vez disso, um comando é apenas uma instrução e, opcionalmente, seus dados, que são enviados para uma exibição nativa. O mapeador de comandos é um Dictionary que mapeia o comando do controle multiplataforma para as suas Ações associadas. Cada manipulador fornece implementações das Ações, que manipulam a API de exibição nativa. Isso garante que, quando um controle entre plataformas envia um comando para sua exibição nativa, a exibição nativa é atualizada conforme necessário. Por exemplo, quando um ScrollView é rolado, o ScrollViewHandler usa um mapeador de comandos para invocar uma Ação que aceita um argumento de posição de rolagem. Em seguida, a Ação instrui a vista nativa subjacente a deslocar-se até essa posição.

A vantagem de usar mapeadores para atualizar exibições nativas é que as exibições nativas podem ser dissociadas de controles entre plataformas. Isso elimina a necessidade de vistas nativas subscreverem e cancelarem a subscrição de eventos de controlo multiplataforma. Ele também permite uma fácil personalização porque os mapeadores podem ser modificados sem subclassificação.

Ciclo de vida do manipulador

Todos os controles .NET MAUI baseados em manipulador suportam dois eventos de ciclo de vida do manipulador:

  • HandlerChanging é gerado quando um novo manipulador está prestes a ser criado para um controle entre plataformas e quando um manipulador existente está prestes a ser removido de um controle entre plataformas. O objeto HandlerChangingEventArgs que acompanha este evento tem propriedades NewHandler e OldHandler, do tipo IElementHandler. Quando a propriedade NewHandler não é null, o evento indica que um novo manipulador está prestes a ser criado para um controle entre plataformas. Quando a propriedade OldHandler não é null, o evento indica que o controle nativo existente está prestes a ser removido do controle entre plataformas e, portanto, todos os eventos nativos devem ser desconectados e outras limpezas devem ser executadas.
  • HandlerChanged é gerado após a criação do manipulador para um controle entre plataformas. Esse evento indica que o controle nativo que implementa o controle de plataforma cruzada está disponível e todos os valores de propriedade definidos no controle de plataforma cruzada foram aplicados ao controle nativo.

Observação

O evento HandlerChanging é gerado em um controle multiplataforma antes do evento HandlerChanged.

Além desses eventos, cada controle de plataforma cruzada também tem um método OnHandlerChanging substituível que é invocado quando o evento HandlerChanging é gerado e um método OnHandlerChanged que é invocado quando o evento HandlerChanged é gerado.

Ver controladores

A tabela a seguir lista os tipos que implementam modos de exibição no .NET MAUI:

Visão Interface Manipulador Mapeador de Propriedades Mapeador de Comandos
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

Manipuladores de página

A tabela a seguir lista os tipos que implementam páginas no .NET MAUI:

Página Android Handler Manipulador de iOS/Mac Catalyst Manipulador do Windows Mapeador de Propriedades Mapeador de Comandos
ContentPage PageHandler PageHandler PageHandler Mapper CommandMapper
FlyoutPage FlyoutViewHandler PhoneFlyoutPageRenderer FlyoutViewHandler Mapper CommandMapper
NavigationPage NavigationViewHandler Renderizador de Navegação NavigationViewHandler Mapper CommandMapper
TabbedPage TabbedViewHandler TabbedRenderer TabbedViewHandler Mapper CommandMapper
Shell ShellHandler ShellRenderer ShellRenderer Mapper CommandMapper