处理程序

.NET Multi-platform App UI (.NET MAUI) 提供跨平台控件集合,可用于显示数据、启动操作、指示活动、显示集合、选取数据等。 每个控件都有提取控件的接口表示形式。 实现这些接口的跨平台控件称为虚拟视图。 处理程序将这些虚拟视图映射到每个平台上的控件,也就是本机视图。 处理程序还负责实例化基础本机视图,并将跨平台控件 API 映射到本机视图 API。 例如,在 iOS 上,处理程序将 .NET MAUI Button 映射到 iOS UIButton。 在 Android 上,则是将 Button 映射到 AppCompatButton

Button handler architecture.

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

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

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

还可以自定义处理程序,以增强现有跨平台控件的外观和行为,而不仅仅是通过控件的 API 进行自定义。 此处理程序自定义修改跨平台控件的本机视图。 处理程序是全局的,自定义控件的处理程序将导致自定义应用中同一类型的所有控件。 有关详细信息,请参阅使用处理程序自定义 .NET MAUI 控件

映射器

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

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

命令映射器定义跨平台控件向本机视图发送命令时要执行的操作。 它们类似于属性映射器,但允许传递额外的数据。 此上下文中的命令并不意味着 ICommand 实现。 实际上,命令只是发送到本机视图的指令及其数据(可选)。 命令映射器是 Dictionary,用于将跨平台控件的命令映射到其关联的操作。 然后,每个处理程序都提供操作的实现,用于操作本机视图 API。 这可确保跨平台控件将命令发送到其本机视图时,会根据需要更新本机视图。 例如,滚动 ScrollView 时,ScrollViewHandler 使用命令映射器调用接受滚动位置参数的操作。 然后,该操作指示基础本机视图滚动到该位置。

使用映射器更新本机视图的优势在于,可以将本机视图与跨平台控件分离。 这样就不需要本机视图订阅和取消订阅跨平台控制事件。 它还允许轻松进行自定义,因为无需子类化即可修改映射器。

处理程序生命周期

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

  • 在从跨平台控件中删除现有处理程序之前,以及在创建跨平台控件的新处理程序之前,将引发 HandlerChanging 事件。 此事件附带的 HandlerChangingEventArgs 对象具有类型为 IElementHandlerNewHandlerOldHandler 属性。 如果 NewHandler 属性不为 null,则该事件指示即将为跨平台控件新建处理程序。 如果 OldHandler 属性不是 null,则该事件指示现有本机控件即将从跨平台控件中删除,因此应取消连接任何本机事件并执行其他清理。
  • 为跨平台控件创建处理程序后将引发 HandlerChanged。 此事件指示实现跨平台控件的本机控件可用,并且跨平台控件上设置的所有属性值都已应用于本机控件。

注意

在跨平台控件上,HandlerChanging 事件是先于 HandlerChanged 事件引发的。

除了这些事件,每个跨平台控件还具有在 HandlerChanging 事件引发时调用的可替代 OnHandlerChanging 方法,以及在 HandlerChanged 事件引发时调用的 OnHandlerChanged 方法。

查看处理程序

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

查看 接口 Handler 属性映射器 命令映射器
ActivityIndicator IActivityIndicator ActivityIndicatorHandler Mapper CommandMapper
BlazorWebView IBlazorWebView BlazorWebViewHandler BlazorWebViewMapper
Border IBorderView BorderHandler Mapper CommandMapper
BoxView IShapeView, IShape ShapeViewHandler Mapper CommandMapper
Button IButton ButtonHandler ImageButtonMapperTextButtonMapper、、 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

页面处理程序

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

Android 处理程序 iOS/Mac 催化剂处理程序 Windows 处理程序 属性映射器 命令映射器
ContentPage PageHandler PageHandler PageHandler Mapper CommandMapper
FlyoutPage FlyoutViewHandler 电话FlyoutPageRenderer FlyoutViewHandler Mapper CommandMapper
NavigationPage NavigationViewHandler NavigationRenderer NavigationViewHandler Mapper CommandMapper
TabbedPage TabbedViewHandler TabbedRenderer TabbedViewHandler Mapper CommandMapper
Shell ShellHandler ShellRenderer ShellRenderer Mapper CommandMapper