.NET MAUI 处理程序体系结构与映射器详解

Viewed 0

.NET MAUI 处理程序体系结构与映射器详解

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

.NET MAUI 处理程序通过特定控件的接口(如 IButton 对应 Button)进行访问,这种设计避免了跨平台控件与处理程序之间的相互引用。每个处理程序类通过 PlatformView 属性公开原生视图,允许设置属性、调用方法和订阅事件;同时,处理程序实现的跨平台控件通过 VirtualView 属性公开。

创建跨平台控件时,其实现由原生视图在每个平台上提供,需要实现将跨平台控件 API 映射到原生视图 API 的处理程序。详细信息可参考使用处理程序创建自定义控件。此外,还可以自定义处理程序以增强现有跨平台控件的外观和行为,这超出了通过控件 API 可进行的自定义范围。这种自定义修改了跨平台控件的原生视图,并且全局处理程序自定义会导致应用中同一类型的所有控件都被自定义。更多信息请参阅使用处理程序自定义 .NET MAUI 控件

映射器

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

属性映射器定义在跨平台控件中发生属性更改时要执行的操作。它是一个 Dictionary,将跨平台控件的属性映射到关联的操作;每个平台处理程序提供操作的实现,用于操控原生视图 API,确保在跨平台控件上设置属性时,底层原生视图会根据需要更新。

命令映射器定义跨平台控件向原生视图发送命令时要执行的操作,类似于属性映射器,但允许传递额外数据。在此上下文中,命令不是 ICommand 实现,而是包含数据的指令。命令映射器是一个 Dictionary,将跨平台控件的命令映射到关联的操作;每个处理程序提供对原生视图 API 进行操作的执行方法。例如,滚动 ScrollView 时,ScrollViewHandler 使用命令映射器调用接受滚动位置参数的操作,指示底层原生视图滚动到该位置。

使用映射器更新原生视图的优点在于,原生视图可以与跨平台控件解耦,避免了手动订阅和取消订阅事件的需要,并允许轻松自定义,因为可以直接修改映射器而无需子类化。

处理程序生命周期

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

  • HandlerChanging 事件在为新跨平台控件创建处理程序或现有处理程序即将从跨平台控件中删除时引发。附带的 HandlerChangingEventArgs 对象具有 NewHandler 和 OldHandler 属性,类型为 IElementHandler。当 NewHandler 不为 null 时,表示即将创建新处理程序;当 OldHandler 不为 null 时,表示现有原生控件将被移除,应断开事件连接并执行清理工作。
  • HandlerChanged 事件在跨平台控件的处理程序创建后触发,表示实现跨平台控件的原生控件可用,且所有属性值已应用。

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

此外,每个跨平台控件还有可重写的 OnHandlerChanging 和 OnHandlerChanged 方法,分别在对应事件引发时调用。

视图处理程序

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

页面处理程序

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

0 Answers