处理器

.NET 多平台应用 UI (.NET MAUI) 提供了一组跨平台控件,可用于显示数据、启动操作、指示活动、显示集合、选取数据等。 每个控件都有一个抽象控件的接口表示形式。 实现这些接口的跨平台控件称为 虚拟视图事件处理程序 将这些虚拟视图映射到每个平台上的控件,这些控件称为 原生视图。 处理器还负责实例化底层原生视图,并将跨平台控件界面 API 映射至原生视图 API。 例如,在 iOS 上,处理程序将 .NET MAUI Button 映射到 iOS UIButton。 在 Android 上,Button 映射到 MaterialButton

按钮处理程序体系结构。

.NET MAUI 处理程序是通过其特定控件的接口访问的,例如对于 ButtonIButton。 这可以避免跨平台控件需要引用其处理程序,从而避免处理程序必须引用跨平台控件。

每个处理程序类通过其 PlatformView 属性公开跨平台控件的本机视图。 可以访问此属性以设置本机视图属性、调用本机视图方法并订阅本机视图事件。 此外,处理程序实现的跨平台控件通过其 VirtualView 属性公开。

创建跨平台控件时,其实现由本机视图在每个平台上提供,应实现将跨平台控件 API 映射到本机视图 API 的处理程序。 有关详细信息,请参阅 使用处理程序创建自定义控件。

还可以自定义处理程序,以增强现有跨平台控件的外观和行为,这超出了通过控件的 API 可以进行的自定义范围。 此处理程序的自定义功能修改了跨平台控件的本机视图。 全局处理程序,自定义某个控件的处理程序将导致应用中同一类型的所有控件都被自定义。 有关详细信息,请参阅 使用处理程序自定义 .NET MAUI 控件。

制图者

.NET MAUI 处理程序的关键概念是映射器。 每个处理程序通常提供一个 属性映射器,有时提供一个 命令映射器,用于将跨平台控件的 API 映射到本机视图的 API。

属性映射器 定义在跨平台控件中发生属性更改时要执行的操作。 Dictionary 是将跨平台控件的属性映射到其关联 Actions 的工具。 然后,每个平台处理程序都提供动作的实现,这些动作用于操控本机视图 API。 这可确保在跨平台控件上设置属性时,底层本地视图会根据需要进行更新。

命令映射器 定义跨平台控件向本机视图发送命令时要执行的操作。 它们类似于属性映射器,但允许传递其他数据。 在此上下文中,指令并不意味着 ICommand 实现。 相反,命令只是一个指令,其中可以包含发送到原生视图的数据。 命令映射器是一个 Dictionary,用于将跨平台控件的命令映射到与之关联的操作。 然后,每个处理程序提供对本机视图 API 进行操作的执行方法。 这可确保跨平台控件将命令发送到其本机视图时,会根据需要更新本机视图。 例如,滚动 ScrollView 时,ScrollViewHandler 使用命令映射器调用接受滚动位置参数的操作。 然后,操作指示底层原生视图滚动到该位置。

使用 映射器 更新本机视图的优点是,本机视图可以与跨平台控件解耦。 这消除了本机视图需要手动订阅和取消订阅跨平台控件事件的必要性。 它还允许轻松进行自定义,因为可以直接修改映射器(mappers),无需子类化。

处理程序生命周期

所有基于处理程序的 .NET MAUI 控件都支持两个处理程序生命周期事件:

  • 当为跨平台控件创建新处理程序时,将引发 HandlerChanging;当现有处理程序即将从跨平台控件中删除时,也将引发 HandlerChanging。 此事件附带的 HandlerChangingEventArgs 对象具有 NewHandlerOldHandler 属性,类型为 IElementHandler。 当 NewHandler 属性不为 null时,该事件表示即将为跨平台控件创建新的处理程序。 当 OldHandler 属性不为 null时,该事件表明现有本机控件将被移除出跨平台控件,因此应解除连接任何本机事件,并执行其他清理工作。
  • 跨平台控件的处理程序创建后,会触发HandlerChanged事件。 此事件指示实现跨平台控件的本机控件可用,并且跨平台控件上设置的所有属性值都已应用于本机控件。

注意

在跨平台控件上,HandlerChanging 事件在 HandlerChanged 事件之前被引发。

除了这些事件之外,每个跨平台控件还有一个可重写的 OnHandlerChanging 方法,该方法在 HandlerChanging 事件引发时调用,还有一个在 HandlerChanged 事件引发时调用的 OnHandlerChanged 方法。

查看处理程序

下表列出了在 .NET MAUI 中实现视图的类型:

视图 接口 处理器 属性映射器 命令映射器
ActivityIndicator IActivityIndicator ActivityIndicatorHandler Mapper CommandMapper
BlazorWebView IBlazorWebView BlazorWebViewHandler BlazorWebViewMapper
Border IBorderView BorderHandler Mapper CommandMapper
BoxView IShapeViewIShape ShapeViewHandler Mapper CommandMapper
Button IButton ButtonHandler ImageButtonMapperTextButtonMapperMapper 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 ImageMapperMapper
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

页面处理程序

下表列出了在 .NET MAUI 中实现页面的类型:

Android 处理程序 iOS/Mac 催化剂处理程序 Windows 处理程序 属性映射器 命令映射器
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