Compartir vía


Controladores

La interfaz de usuario de aplicaciones multiplataforma de .NET (.NET MAUI) proporciona una colección de controles multiplataforma que se pueden usar para mostrar datos, iniciar acciones, indicar actividad, mostrar colecciones, elegir datos, etc. Cada control tiene una representación de interfaz que abstrae el control. Los controles multiplataforma que implementan estas interfaces se conocen como vistas virtuales . Manejadores asignan estas vistas virtuales a los controles de cada plataforma, conocidos como vistas nativas. Los manejadores también son responsables de crear instancias de la vista nativa subyacente y de mapear la API de control multiplataforma a la API de vista nativa. Por ejemplo, en iOS, un controlador de .NET MAUI asigna un Button a un UIButtonde iOS. En Android, el Button se asigna a un MaterialButton:

arquitectura del controlador de botones.

Se accede a los controladores de MAUI de .NET mediante la interfaz específica del control, como IButton para un(a) Button. Esto evita que el control multiplataforma tenga que hacer referencia a su controlador y que el controlador tenga que hacer referencia al control multiplataforma.

Cada clase de controlador expone la vista nativa del control multiplataforma mediante su propiedad PlatformView. Se puede tener acceso a esta propiedad para establecer propiedades de vista nativas, invocar métodos de vista nativos y suscribirse a eventos de vista nativos. Además, el control multiplataforma implementado por el controlador se expone a través de su propiedad VirtualView.

Al crear un control multiplataforma cuya implementación se proporciona en cada plataforma mediante vistas nativas, debe implementar un controlador que asigne la API de control multiplataforma a las API de vista nativa. Para obtener más información, consulte Creación de controles personalizados con controladores.

También puede personalizar controladores para aumentar la apariencia y el comportamiento de los controles multiplataforma existentes más allá de la personalización posible a través de la API del control. Esta personalización del controlador modifica las vistas nativas para el control multiplataforma. Los controladores son globales y la personalización de un controlador para un control dará como resultado que todos los controles del mismo tipo se personalicen en la aplicación. Para obtener más información, consulte Personalización de controles MAUI de .NET con manejadores.

Mapeadores

Un concepto clave de los controladores MAUI de .NET es los mapeadores. Cada controlador normalmente proporciona un asignador de propiedades y, a veces, un asignador de comandos , que asigna la API del control multiplataforma a la API de la vista nativa.

Un asignador de propiedades define qué acciones realizar cuando se produce un cambio de propiedad en el control multiplataforma. Es un Dictionary que asigna las propiedades del control multiplataforma a sus acciones asociadas. A continuación, cada controlador de plataforma proporciona implementaciones de acciones, que manipulan la API de vista nativa. Esto garantiza que, cuando se establece una propiedad en un control multiplataforma, la vista nativa subyacente se actualiza según sea necesario.

Un asignador de comandos define qué acciones se deben realizar cuando el control multiplataforma envía comandos a vistas nativas. Son similares a los mapeadores de propiedades, pero permiten pasar datos adicionales. Un comando en este contexto no significa una implementación de ICommand. En su lugar, un comando es simplemente una instrucción y, opcionalmente, sus datos, que se envían a una vista nativa. El asignador de comandos es un Dictionary que asocia el comando del control multiplataforma a sus Acciones asociadas. Cada controlador proporciona implementaciones de las Acciones, que manipulan la API de vista nativa. Esto garantiza que cuando un control multiplataforma envía un comando a su vista nativa, la vista nativa se actualiza según sea necesario. Por ejemplo, cuando se desplaza un ScrollView, el ScrollViewHandler usa un asignador de comandos para invocar una Acción que acepta un argumento de posición de desplazamiento. A continuación, la acción indica a la vista nativa subyacente que se desplácese hasta esa posición.

La ventaja de usar asignadores para actualizar las vistas nativas es que las vistas nativas se pueden desacoplar de controles multiplataforma. Esto elimina la necesidad de que las vistas nativas se suscriban y cancelen la suscripción a los eventos de control multiplataforma. También permite una personalización sencilla porque los mapeadores se pueden modificar sin necesidad de subclases.

Ciclo de vida del manejador

Todos los controles .NET MAUI basados en el controlador admiten dos eventos de ciclo de vida del controlador:

  • HandlerChanging se genera cuando se va a crear un nuevo controlador para un control multiplataforma y cuando un controlador existente está a punto de quitarse de un control multiplataforma. El objeto HandlerChangingEventArgs que acompaña a este evento tiene propiedades NewHandler y OldHandler, de tipo IElementHandler. Cuando la propiedad NewHandler no es null, el evento indica que se va a crear un nuevo controlador para un control multiplataforma. Cuando la propiedad OldHandler no es null, el evento indica que el control nativo existente está a punto de ser eliminado del control multiplataforma y, por lo tanto, se deben desconectar los eventos nativos y realizar otras tareas de limpieza.
  • HandlerChanged se activa después de que se ha creado el manejador para un control multiplataforma. Este evento indica que el control nativo que implementa el control multiplataforma está disponible y todos los valores de propiedad establecidos en el control multiplataforma se han aplicado al control nativo.

Nota

El evento HandlerChanging se genera antes del evento HandlerChanged en un control multiplataforma.

Además de estos eventos, cada control multiplataforma también tiene un método OnHandlerChanging reemplazable que se invoca cuando se genera el evento HandlerChanging y un método OnHandlerChanged que se invoca cuando se genera el evento HandlerChanged.

Controladores de vistas

En la tabla siguiente se enumeran los tipos que implementan vistas en .NET MAUI:

Vista Interfaz Controlador Mapeador de propiedades Asignador 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

Controladores de página

En la tabla siguiente se enumeran los tipos que implementan páginas en .NET MAUI:

Página Controlador de Android Controlador de iOS/Mac Catalyst Controlador de Windows Mapeador de propiedades Asignador de comandos
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