处理器
.NET 多平台应用 UI (.NET MAUI) 提供了一组跨平台控件,可用于显示数据、启动操作、指示活动、显示集合、选取数据等。 每个控件都有一个抽象控件的接口表示形式。 实现这些接口的跨平台控件称为 虚拟视图。
事件处理程序 将这些虚拟视图映射到每个平台上的控件,这些控件称为 原生视图。 处理器还负责实例化底层原生视图,并将跨平台控件界面 API 映射至原生视图 API。 例如,在 iOS 上,处理程序将 .NET MAUI Button 映射到 iOS UIButton
。 在 Android 上,Button 映射到 MaterialButton
:
.NET MAUI 处理程序是通过其特定控件的接口访问的,例如对于 Button的 IButton
。 这可以避免跨平台控件需要引用其处理程序,从而避免处理程序必须引用跨平台控件。
每个处理程序类通过其 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
对象具有NewHandler
和OldHandler
属性,类型为IElementHandler
。 当NewHandler
属性不为null
时,该事件表示即将为跨平台控件创建新的处理程序。 当OldHandler
属性不为null
时,该事件表明现有本机控件将被移除出跨平台控件,因此应解除连接任何本机事件,并执行其他清理工作。 - 跨平台控件的处理程序创建后,会触发
HandlerChanged
事件。 此事件指示实现跨平台控件的本机控件可用,并且跨平台控件上设置的所有属性值都已应用于本机控件。
注意
在跨平台控件上,HandlerChanging
事件在 HandlerChanged
事件之前被引发。
除了这些事件之外,每个跨平台控件还有一个可重写的 OnHandlerChanging
方法,该方法在 HandlerChanging
事件引发时调用,还有一个在 HandlerChanged
事件引发时调用的 OnHandlerChanged
方法。
查看处理程序
下表列出了在 .NET MAUI 中实现视图的类型:
页面处理程序
下表列出了在 .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 |