乘風破浪,遇見最美Windows 11之現代Windows桌面應用開發 - 微軟跨平臺UI框架.NET MAUI,基於.NET 6構建的通用框架

什麼是.NET MAUI

https://dotnet.microsoft.com/zh-cn/apps/maui

image

.NET Multi-platform App UI (.NET MAUI)是一個框架,用於在單個代碼庫中使用C#和XAML構建新式、多平臺、本機編譯的iOS、Android、macOS和Windows應用。

image

.NET MAUI使用最新的新式技術在Android、iOS、macOS和Windows上構建本機應用,將它們抽象爲基於.NET 6構建的通用框架。

默認情況下,本機應用的外觀與它們所屬的操作系統類似,並且佈局自動完全適應每個設備,無需額外代碼。

平臺API可直接從C#獲得,以從單個跨平臺API訪問60多個平臺功能,包括訪問隔離存儲、傳感器、地理位置、相機等內容,但不會受到任何影響。

歷史

  • 在2020年5月, 微軟宣佈了MAUI跨平臺框架, MAUI是Xamarin.Forms演變而來, 這也就意味着, 如果你原來具備Xamarin.Forms開發經驗, 你可以流暢的過渡到MAUI開發當中
  • 原本於2021年底發佈的MAUI正式版被推遲到了2022年5月底發佈。現在, 你目前可以通過安裝VS2022 預覽版進行安裝MAUI開發選項。 此版本中, 將不會存在Xamarin.Forms項目模板。

特性

  • 單個代碼庫支持多個平臺
  • 完整的熱重載功能 (.NET/XAML)
  • 原生平臺UI
  • 支持完整的自繪
  • 多窗口模式
  • 集成跨平臺本機API
  • 支持.NET6/C#10新特性

對比Xamarin.Forms

平臺架構

.NET MAUI與.NET 6.0集成。

Xamarin.Forms MAUI
image image

項目結構

使用Xamarin.Forms,開發人員可能會在處理針對多個平臺的多個項目時感到繁瑣。圖像,字體和平臺相關代碼的維護; 添加不同的依賴項,並在它們被引用爲NuGet包時解析它們。遇到這些問題後,開發人員現在可以在.NET MAUI中通過單個項目得到解決

由於.NET MAUI是一個簡單的項目應用,因此它可以在基於多目標的結構上運行。.NET MAUI應用包含一個"Platforms"文件夾,其子文件夾表示Android、iOS Maccatalyst和Windows等平臺,以定位在平臺上啓動應用的特定於平臺的代碼。它也可以根據您自己的文件名進行多目標。

Xamarin.Forms MAUI
每個平臺維護一個單獨的項目 一個項目支持多個平臺
平臺相關的代碼在不同項目中單獨維護 在Platforms文件夾中維護

受支持的平臺

Xamarin和.NET MAUI之間平臺支持的主要區別在於它們對Windows的支持。Xamarin支持UWP,而.NET MAUI支持WinUI

Xamarin.Forms MAUI
Android 4.4(API19)或更高版本 Android 5.0(API 21)或更高版本
iOS 9或更高版本 iOS 10或更高版本
UWP:Windows 10,內部版本10.0.16299.0或更高版本,用於.NET Standard 2.0支持 使用WindowsUI庫(WinUI)3 Windows 11和Windows 10版本1809或更高版本
使用Mac Catalyst macOS 10.13或更高版本
其他平臺支持:Tizen、macOS 10.13或更高版本、GTK#、WPF 其他平臺支持:Tizen由三星支持;Linux由社區支持。

.NET CLI

.NET命令行界面(CLI)是一個跨平臺工具鏈,用於開發、構建、運行和發佈.NET應用程序。此.NET CLI爲.NET MAUI應用程序提供了無縫的構建和運行體驗。

Xamarin.Forms MAUI
Xamarin支持.NET Framework來構建和運行應用 .NET MAUI支持.NET CLI工具鏈來構建、運行和發佈.NET應用程序。

渲染器和處理程序架構

在Xamarin中,控件是使用呈現器創建的。當開發人員想要自定義本機控件的UI時,他們必須使用自定義呈現器來執行此操作。這些渲染器在性能和應用大小方面花費了大量用戶。

但是.NET MAUI使用的處理程序體系結構與本機程序集非常鬆散地耦合。藉助本機平臺,這會產生具有更好性能的輕量級應用程序。

如果需要,可以在此處使用渲染器。移植時,可以重用Xamarin.Forms自定義呈現器。

Xamarin.Forms MAUI
使用呈現器體系結構 使用處理程序體系結構
與本機控件緊密耦合 與本機控件鬆散耦合
不能在使用處理程序 如果需要,可以在此處使用渲染器。移植時,可以重用Xamarin.Forms自定義呈現器。
image image

.NET 6和C# 10

.NET MAUI已集成到.NET 6中,而Xamarin.Forms是一個.NET Framework。由於.NET 6集成,您可以在.NET MAUI中使用以下.NET 6和C# 10功能

資源管理

.NET MAUI在資源方面接管了Xamarin,特別是在圖像方面。您無需維護一組映像即可滿足特定於平臺或設備的需求。單個SVG圖像足以滿足所有平臺和設備要求。SVG圖像被轉換爲.png圖像,以便在所有平臺上工作。

Xamarin.Forms MAUI
資源包括圖像和類 資源包括MauiImage和MauiResources等類
需要爲特定於平臺的設備維護基於分辨率的圖像 藉助SVG圖像,無需維護特定於平臺或特定於設備的圖像
需要爲每個平臺單獨維護資源文件 資源可以在單個位置進行維護

熱重載支持

MAUI支持.NET熱重載和XAML熱重載。

Xamarin.Forms MAUI
.NET熱重載: 不支持NET的編輯和繼續功能(但UWP對使用的運行時編輯的支持有限) .NET熱重載: 提供完整的.NET熱重載支持
XAML熱重載: 功能完成:SDK 5.x和Visual Studio 2019版本16.9或更高版本 XAML熱重載: 提供完整的支持

圖形繪製

在Xamarin中,沒有可用於滿足任何繪圖要求的直接API。您必須使用渲染器在本機端執行此操作。但.NET MAUI現在抽象化了本機繪圖,併爲您帶來了更好的圖形API。.NET MAUI中的跨平臺圖形功能提供了用於繪製和繪製形狀的繪圖畫布。畫筆是主要類型。

Xamarin.Forms MAUI
沒有可用的圖形 圖形模式,如繪畫,混合可用
無法自定義繪圖 支持繪製圖形
顏色 畫筆

資源和服務

與Xamarin不同,.NET MAUI應用是使用.NET通用主機引導的。因此,如果要初始化任何字體,服務或第三方組件,則可以從單個位置完成

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder.UseMauiApp<App>().ConfigureFonts
    (
        fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        }
    );
    return builder.Build();
}

可訪問性

通常在Xamarin中,我們使用自動化屬性和本機API爲屏幕閱讀器提供對應用中所用控件中文本的適當輔助功能。

但.NET MAUI提供語義屬性以在應用中提供輔助功能值(您可以在.NET MAUI中使用自動化屬性,但推薦的方法是語義屬性)。

Blazor應用程序

在Xamarin中無法開發Blazor混合應用,但你可以生成.NET MAUI Blazor應用

image

跨平臺API

Xamarin.Forms MAUI
可以使用Xamarin.Essentials執行設備功能的跨平臺API 設備功能的跨平臺API也與Microsoft.Maui.Essentials命名空間下的MAUI集成

多窗口

在.NET MAUI中,可以一次在Android,iPad上的iOS,Mac Catalyst和Windows上打開多個窗口。此支持在Xamarin中不可用。

初識MAUI

通過Visual Studio 2022預覽版安裝

在預覽版的安裝界面,我們會看到在"桌面應用和移動應用"分類中新增了一項".NET Multi-platform App UI開發",我們勾選它。

image

image

通過MAUI項目模板創建項目

在Visual Studio 2022創建項目時,選擇C#語言,所有平臺,類型選MAUI

image

創建示例項目

image

框架這次比較簡單,從.NET 6.0開始,目前也只有.NET 6.0,哈哈。

image

創建後,就是一個單項目

image

編譯運行首個項目

第一次運行,總會碰壁,首先就是要打開Windows 11的開發人員模式

image

image

image

第二次運行,可能還有一個報錯,那就是要求接受Android SDK的許可證

image

直接雙擊這條消息,在彈出的許可協議對話框中點擊接受按鈕

image

愉快的跑起來了

image

看看項目結構

image

熟悉MAUI項目結構

image

其中:

  • Platforms: 包含MAUI項目支持的所有平臺。
  • Resources: 項目中所用到的資源文件。如:圖像、樣式文件。
  • App.xaml: 跨平臺移動應用程序的類。
  • AppShell/MainPage: 默認模板項目Shell導航窗口。
  • MauiProgram: 創建應用程序主機,初始化啓動容器、服務以及構建。

啓動MAUI項目

選擇一個目標運行的平臺, 啓動項目。

image

如果選的是Android模擬器,那麼它會要求先創建一個模擬器

image

image

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章