處理常式
.NET 多平臺應用程式 UI (.NET MAUI) 提供跨平臺控件的集合,可用來顯示數據、起始動作、指出活動、顯示集合、挑選數據等等。 每個控件都有一個介面表示法,可抽象化控件。 實作這些介面的跨平臺控件稱為 虛擬檢視。 處理程式會將 這些虛擬檢視對應至每個平臺上的控件,也就是所謂的 原生檢視。 處理程式也會負責具現化基礎原生檢視,並將跨平臺控件 API 對應至原生檢視 API。 例如,在 iOS 上,處理程式會將 .NET MAUI Button 對應至 iOS UIButton
。 在 Android 上,會 Button 對應至 AppCompatButton
:
.NET MAUI 處理程式是透過其控件特定介面來存取,例如 IButton
的 Button。 這可避免跨平臺控件必須參考其處理程式,而處理程式必須參考跨平臺控件。
每個處理程式類別都會透過其 PlatformView
屬性公開跨平臺控制件的原生檢視。 您可以存取這個屬性來設定原生檢視屬性、叫用原生檢視方法,以及訂閱原生檢視事件。 此外,處理程式所實作的跨平臺控件會透過其 VirtualView
屬性公開。
當您建立跨平臺控件,其實作是由原生檢視在每個平臺上提供時,您應該實作將跨平臺控制項 API 對應至原生檢視 API 的處理程式。 如需詳細資訊,請參閱 使用處理程式建立自定義控件。
您也可以自定義處理程式,以增強現有跨平臺控件的外觀和行為,而無法透過控件的 API 進行自定義。 此處理程式自定義會修改跨平臺控件的原生檢視。 處理程式是全域的,而自定義控件的處理程式會導致應用程式中自定義相同類型的所有控件。 如需詳細資訊,請參閱 使用處理程式自定義 .NET MAUI 控件。
對應程式
.NET MAUI 處理程式的重要概念是對應器。 每個處理程式通常會提供 屬性對應程式,有時是 命令對應程式,將跨平臺控件的 API 對應至原生檢視的 API。
屬性對應程式會定義跨平臺控件中發生屬性變更時要採取的動作。 它是 Dictionary
,會將跨平臺控件的屬性對應至其相關聯的動作。 接著,每個平台處理程式都會提供動作的實作,以操作原生檢視 API。 這可確保在跨平臺控件上設定屬性時,會視需要更新基礎原生檢視。
命令對應程式會定義跨平臺控制項將命令傳送至原生檢視時要採取的動作。 它們類似於屬性對應器,但允許傳遞其他數據。 此內容中的命令並不表示實 ICommand 作。 相反地,命令只是一個指令,並選擇性地將其數據傳送至原生檢視。 命令對應程式是 Dictionary
,會將跨平臺控件的命令對應至其相關聯的動作。 接著,每個處理程式都會提供動作的實作,以操作原生檢視 API。 這可確保當跨平臺控件將命令傳送至其原生檢視時,會視需要更新原生檢視。 例如,捲動時 ScrollView ,會 ScrollViewHandler
使用命令對應程式叫用接受捲動位置自變數的 Action。 接著,動作會指示基礎原生檢視卷動至該位置。
使用 對應器 來更新原生檢視的優點是原生檢視可以從跨平臺控件分離。 這樣就不需要原生檢視訂閱和取消訂閱跨平臺控件事件。 它也可讓您輕鬆自定義,因為不需要子類別化即可修改對應程式。
處理程式生命週期
所有處理程式型 .NET MAUI 控制項都支援兩個處理程式生命週期事件:
HandlerChanging
當即將為跨平臺控制項建立新的處理程式,以及即將從跨平臺控制件中移除現有的處理程式時,就會引發 。 此HandlerChangingEventArgs
事件隨附的物件具有NewHandler
和OldHandler
屬性,類型IElementHandler
為 。NewHandler
當 屬性不是null
時,事件表示即將為跨平臺控制項建立新的處理程式。OldHandler
當 屬性不是null
時,事件會指出現有的原生控件即將從跨平臺控件中移除,因此應該取消連接任何原生事件,並執行其他清除。HandlerChanged
會在建立跨平臺控件的處理程序之後引發。 這個事件表示實作跨平臺控件的原生控件可供使用,而且跨平臺控件上設定的所有屬性值都已套用至原生控件。
注意
事件 HandlerChanging
會在事件之前 HandlerChanged
於跨平臺控件上引發。
除了這些事件之外,每個跨平臺控件也有可覆寫OnHandlerChanging
的方法,可在引發事件時叫用,以及OnHandlerChanged
引發事件時HandlerChanging
HandlerChanged
叫用的方法。
檢視處理程式
下表列出在 .NET MAUI 中實作檢視的類型:
頁面處理常式
下表列出在 .NET MAUI 中實作頁面的類型:
頁 | Android 處理程式 | iOS/Mac Catalyst 處理程式 | 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 |