描述 .NET MAUI 架構
跨平台應用程式開發常用的模式是從使用者介面考慮商業邏輯,然後針對每個平台開發個別的使用者介面和 UI 邏輯。 雖然每種裝置類型的商業邏輯都會保持不變,但驅動應用程式並呈現資料的程式碼可能會有所不同。 此變異數是因為裝置所提供的能力、API 和功能不同所致。 以這種方式建置多平台應用程式不僅需要處理個別的軟體開發套件 (SDK),還涉及不同的語言和工具集。
.NET MAUI (多平台應用程式使用者介面) 的目的是要簡化多平台應用程式開發。 透過 .NET MAUI,您可以使用單一專案建立多平台應用程式,但如有需要,您可以新增平台特定的原始程式碼和資源。 .NET MAUI 的主要目的是讓您在單一程式碼基底中盡可能實作應用程式邏輯和 UI 配置。
在此單元中,您將了解 .NET MAUI 的結構,以及建置 .NET MAUI 應用程式所需的工具。
什麼是 .NET MAUI 技術堆疊?
.NET 提供一系列的平台特定架構來建立應用程式:適用於 Android 的 .NET、適用於 iOS (和 iPadOS) 的 .NET、適用於 Mac 的 .NET,以及 WinUI 3 (使用 Windows 應用程式 SDK)。 這些架構皆可存取相同的 .NET 6 基底類別庫 (BCL)。 此程式庫提供建立及管理資源的功能,而且通常可將基礎裝置的詳細資料從程式碼抽象化。 BCL 取決於 .NET 執行階段,以提供程式碼的執行環境。 Mono,這是 .NET 執行階段的開放原始碼實作,會實作 Android、iOS (和 iPadOS) 以及 macOS 環境。 在 Windows 上,Win32 會執行相同的角色,但已針對 Windows 平台將其最佳化。
雖然 BCL 可讓在不同類型的裝置上執行的應用程式共用常見的商務邏輯,但各種平台有不同的方式來定義應用程式的使用者介面。 平台提供不同的模型,以指定使用者介面元素的通訊和相互操作方式。 您可以使用適當的平台特定架構 (適用於 Android 的 .NET、適用於 iOS 的 .NET、適用於 Mac 的 .NET 或 WinUI 3) 個別製作每個平台的 UI。 但使用這種方法時,您必須維護每個裝置系列的程式碼基底。 .NET MAUI 提供單一架構,用於建置適用於行動裝置和桌面應用程式的 UI。 您使用此架構 (下圖箭號 1 所指示) 建立 UI,而 .NET MAUI 會負責將其轉換為適當的平台 (箭號 2)。
有時候您需要實作平台特定功能。 在這些情況下,您可以在平台特定架構中叫用方法,如下圖中箭號 3 的醒目提示。
.NET MAUI 如何運作?
.NET MAUI 會從其邏輯描述中將 UI 元素的實作抽象化。 您可以使用 XAML (Extensible Application Markup Language) 來描述 UI,這是一種以 XML 為基礎的平台中立語言。 例如,下列 XAML 片段顯示按鈕控制項的描述:
<Button Text="Click me"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
此範例定義按鈕的標籤 (「按一下我」),並指定當使用者選取按鈕時,應該執行名為 OnCounterClicked
的方法。 其他屬性可以修改按鈕和文字的版面配置;在此範例中,文字會位於按鈕上的置中位置。 語義屬性可為視障使用者提供協助工具支援。
.NET MAUI 一律會為目標裝置產生機器碼,讓您獲得最佳效能。 .NET MAUI 會使用每個平台和 UI 元素特有的處理常式來執行作業。 例如,如果您以應用程式為目標 iOS,則 .NET MAUI 處理常式會將此程式碼對應至 UIButton
。 如果您在 Android 上執行,您會收到 Android AppCompatButton。 這些處理常式會間接透過 .NET MAUI 提供的控制項特定介面來存取,例如按鈕的 IButton
。
注意
您也可以視需要使用 C# 程式碼動態建立 UI。 此方法可讓您根據環境修改版面配置。 例如,如果使用者沒有適當的授權等級,您可能不希望顯示特定控制項。
.NET MAUI 可讓您輕鬆存取一般控制項,例如按鈕。 文字輸入欄位、標籤及日期選擇器等其他常見的控制項也同樣容易。 但個別控制項並不足以構成可建立豐富應用程式的絕佳平台。 .NET MAUI 也提供:
- 用於設計頁面的詳盡版面配置引擎。
- 多個用於建立豐富瀏覽類型 (例如選單) 的頁面類型。
- 對更簡潔且可維護之開發模式的資料繫結支援。
- 建立自訂處理常式以強化 UI 元素呈現方式的能力。
- 直接存取原生 API,以及許多不同於 UI 的行動與桌面應用程式常見需求的抽象化。 基本程式庫可讓應用程式存取 GPS、加速計、電池和網路狀態等項目。 有數十種在行動裝置開發中常見的感應器和服務,也可透過此程式庫取得。