共用方式為


處理常式

.NET 多平臺應用程式 UI (.NET MAUI) 提供跨平臺控件的集合,可用來顯示數據、起始動作、指出活動、顯示集合、挑選數據等等。 每個控件都有一個介面表示法,可抽象化控件。 實作這些介面的跨平臺控件稱為 虛擬檢視處理程式會將 這些虛擬檢視對應至每個平臺上的控件,也就是所謂的 原生檢視。 處理程式也會負責具現化基礎原生檢視,並將跨平臺控件 API 對應至原生檢視 API。 例如,在 iOS 上,處理程式會將 .NET MAUI Button 對應至 iOS UIButton。 在 Android 上,會 Button 對應至 AppCompatButton

Button handler architecture.

.NET MAUI 處理程式是透過其控件特定介面來存取,例如 IButtonButton。 這可避免跨平臺控件必須參考其處理程式,而處理程式必須參考跨平臺控件。

每個處理程式類別都會透過其 PlatformView 屬性公開跨平臺控制件的原生檢視。 您可以存取這個屬性來設定原生檢視屬性、叫用原生檢視方法,以及訂閱原生檢視事件。 此外,處理程式所實作的跨平臺控件會透過其 VirtualView 屬性公開。

當您建立跨平臺控件,其實作是由原生檢視在每個平臺上提供時,您應該實作將跨平臺控制項 API 對應至原生檢視 API 的處理程式。 如需詳細資訊,請參閱 使用處理程式建立自定義控件。

您也可以自定義處理程式,以增強現有跨平臺控件的外觀和行為,而無法透過控件的 API 進行自定義。 此處理程式自定義會修改跨平臺控件的原生檢視。 處理程式是全域的,而自定義控件的處理程式會導致應用程式中自定義相同類型的所有控件。 如需詳細資訊,請參閱 使用處理程式自定義 .NET MAUI 控件。

對應程式

.NET MAUI 處理程式的重要概念是對應器。 每個處理程式通常會提供 屬性對應程式,有時是 命令對應程式,將跨平臺控件的 API 對應至原生檢視的 API。

屬性對應程式會定義跨平臺控件中發生屬性變更時要採取的動作。 它是 Dictionary ,會將跨平臺控件的屬性對應至其相關聯的動作。 接著,每個平台處理程式都會提供動作的實作,以操作原生檢視 API。 這可確保在跨平臺控件上設定屬性時,會視需要更新基礎原生檢視。

命令對應程式會定義跨平臺控制項將命令傳送至原生檢視時要採取的動作。 它們類似於屬性對應器,但允許傳遞其他數據。 此內容中的命令並不表示實 ICommand 作。 相反地,命令只是一個指令,並選擇性地將其數據傳送至原生檢視。 命令對應程式是 Dictionary ,會將跨平臺控件的命令對應至其相關聯的動作。 接著,每個處理程式都會提供動作的實作,以操作原生檢視 API。 這可確保當跨平臺控件將命令傳送至其原生檢視時,會視需要更新原生檢視。 例如,捲動時 ScrollView ,會 ScrollViewHandler 使用命令對應程式叫用接受捲動位置自變數的 Action。 接著,動作會指示基礎原生檢視卷動至該位置。

使用 對應器 來更新原生檢視的優點是原生檢視可以從跨平臺控件分離。 這樣就不需要原生檢視訂閱和取消訂閱跨平臺控件事件。 它也可讓您輕鬆自定義,因為不需要子類別化即可修改對應程式。

處理程式生命週期

所有處理程式型 .NET MAUI 控制項都支援兩個處理程式生命週期事件:

  • HandlerChanging 當即將為跨平臺控制項建立新的處理程式,以及即將從跨平臺控制件中移除現有的處理程式時,就會引發 。 此 HandlerChangingEventArgs 事件隨附的物件具有 NewHandlerOldHandler 屬性,類型 IElementHandler為 。 NewHandler當 屬性不是 null時,事件表示即將為跨平臺控制項建立新的處理程式。 OldHandler當 屬性不是 null時,事件會指出現有的原生控件即將從跨平臺控件中移除,因此應該取消連接任何原生事件,並執行其他清除。
  • HandlerChanged 會在建立跨平臺控件的處理程序之後引發。 這個事件表示實作跨平臺控件的原生控件可供使用,而且跨平臺控件上設定的所有屬性值都已套用至原生控件。

注意

事件 HandlerChanging 會在事件之前 HandlerChanged 於跨平臺控件上引發。

除了這些事件之外,每個跨平臺控件也有可覆寫OnHandlerChanging的方法,可在引發事件時叫用,以及OnHandlerChanged引發事件時HandlerChangingHandlerChanged叫用的方法。

檢視處理程式

下表列出在 .NET MAUI 中實作檢視的類型:

檢視 介面 處理常式 屬性對應程式 命令對應程式
ActivityIndicator IActivityIndicator ActivityIndicatorHandler Mapper CommandMapper
BlazorWebView IBlazorWebView BlazorWebViewHandler BlazorWebViewMapper
Border IBorderView BorderHandler Mapper CommandMapper
BoxView IShapeView, IShape ShapeViewHandler Mapper CommandMapper
Button IButton ButtonHandler ImageButtonMapper、 、 TextButtonMapperMapper 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 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