MAUI 入門教程系列(1.框架簡介)

前言

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

MAUI新特性一覽

  • 單個代碼庫支持多個平臺

  • 完整的熱重載功能 (.NET/XAML)

  • 原生平臺UI

  • 支持完整的自繪

  • 多窗口模式

  • 集成跨平臺本機API

  • 支持.NET6/C#10新特性

Xamarin.Forms VS MAUI

平臺架構

首先,平臺架構的主要變化是.NET MAUI與.NET 6.0集成.

Xamarin.Forms.NET MAUI
02774d6c776d764681033c578983e5fe.pngb5edf16748d7a5e4852a8e1177b9db9e.png

項目結構

Xamarin.Forms和.NET MAUI之間的主要區別在于它們的項目結構。

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

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

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

支持的平臺和版本

Xamarin和.NET MAUI之間平臺支持的主要區別在于它們對Windows的支持。Xamarin 支持 UWP,而 .NET MAUI 支持 WinUI。有關支持版本的詳細信息,請查看下表。

Xamarin.FormsMAUI
- Android 4.4 (API 19) 或更高版本
- iOS 9 或更高版本
- UWP:Windows 10,內部版本 10.0.16299.0 或更高版本,用于 .NET Standard 2.0 支持
- Android 5.0 (API 21) 或更高版本。
- iOS 10 或更高版本。
- macOS 10.13 或更高版本
- WinUI:Windows 11 和 Windows 10 版本 1809 或更高版本
其他平臺支持:
Tizen
macOS 10.13 或更高版本
GTK#
WPF
其他平臺支持:
Tizen,由三星支持。
Linux,由社區支持。

.NET CLI

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

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

渲染器和處理程序架構

在 Xamarin 中,控件是使用呈現器創建的。當開發人員想要自定義本機控件的 UI 時,他們必須使用自定義呈現器來執行此操作。這些渲染器在性能和應用大小方面花費了大量用戶。
但是 .NET MAUI 使用的處理程序體系結構與本機程序集非常松散地耦合。借助本機平臺,這會產生具有更好性能的輕量級應用程序。
如果需要,可以在此處使用渲染器。移植時,可以重用 Xamarin.Forms 自定義呈現器。

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

.NET 6

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

資源管理

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

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

熱重載支持

Xamarin.Forms.NET MAUI
.NET熱重載:

不支持(但 UWP 對使用 的運行時編輯的支持有限)。

NET 的編輯和繼續功能)。

.NET熱重載:
提供完整的 .NET 熱重載支持。
XAML熱重載:
實驗的:SDK 4.x 和 Visual Studio 2019 版本 16.9 之前的版本。
功能完成:SDK 5.x 和 Visual Studio 2019 版本 16.9 或更高版本。
XAML熱重載:
提供完整的支持。

圖形繪制

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

Xamarin.Forms.NET 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 為屏幕閱讀器提供對應用中所用控件中文本的適當輔助功能。
Xamarin.Forms 輔助功能
但 .NET MAUI 提供語義屬性以在應用中提供輔助功能值(您可以在 .NET MAUI 中使用自動化屬性,但推薦的方法是語義屬性)。、
MAUI 可訪問性

Blazor應用程序

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

跨平臺API

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

多窗口

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286304.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286304.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ivx動效按鈕 基礎按鈕制作 02

本節示例&#xff1a; 一、特效塊的制作 在上一節中制作了一個可以增加動效的自定義按鈕后&#xff0c;這一節通過這個行按鈕對其進行特效制作。 在行按鈕中的絕對定位中&#xff0c;我們創建一個行&#xff0c;命名為移入&#xff0c;接下來我們做一個移入動效&#xff1a…

C語言試題二十之利用以下的簡單迭代方法求方程cos(x)-x=0的一個實根。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數fu…

最新Modis影像數據下載完整流程---以MOD13Q1 NDVI數據下載為例(2020年12月2日更新)

本文詳細講解Modis數據的下載流程,以MOD13Q1影像為例,該數據為16天合成的空間分辨率為250m的NDVI產品,原始數據的投影為正弦曲線投影。 Modis數據MRT和ArcGIS處理方法集錦: 1.《ArcGIS10.8完美實現MODIS NDVI數據格式轉換和投影變換》 2.《重磅!ArcGIS10.8 Python代碼批量…

解決夜神模擬器無法聯機調試 adb server version (**) doesn't match this client (**); killing...

前言 最新下了個最新版的夜神模擬器&#xff0c;然后adb devices發現連不上模擬器了&#xff0c;報adb server version (**) doesnt match this client (##); killing... 從報錯信息看是adb版本不匹配導致的&#xff0c;接下來講如何解決這個問題 環境&#xff1a; 夜神模擬器…

WCF分布式開發常見錯誤(25):The certificate 'CN=WCFHTTPS' must have a private key

在準備WCF安全開發實踐編程系列文章的時候&#xff0c;制作證書出現這個問題。The certificate CNWCFHTTPS must have a private key that is capable of key exchange. The process must have access rights for the private key.證書必須有一個可以交換密鑰的私鑰&#xff0c…

lintcode二叉樹的鋸齒形層次遍歷 (雙端隊列)

題目鏈接&#xff1a; http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉樹的鋸齒形層次遍歷 給出一棵二叉樹&#xff0c;返回其節點值的鋸齒形層次遍歷&#xff08;先從左往右&#xff0c;下一層再從右往左&#xff0c;層與層之間交替進…

C語言試題二十一之定義n×n的二維數組編寫函數 function(int a[][n])功能是:使數組左下半三角元素中的值全部置成0。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 定義了nn的…

【前端就業課 第二階段】CSS 零基礎到實戰(02)列表

整個前端學習路線 以下路線為 CSDN C認提供&#xff1a; 如果想 快點搞完 并且 就業 可以選擇C認證&#xff0c;C認證還可以 內推、招聘會 &#xff0c;所以如果在校生想要穩一點&#xff0c;就可以選擇C認證或者超級實習生計劃&#xff0c;賊穩&#xff01; 鏈接在這PC端&…

【專升本計算機】甘肅省2020年專升本計算機測試題

文章目錄 第一部分 公共基礎部分第二部分 數據庫部分(文史財經類)第三部分 C語言部分(理工農醫類)第四部分 綜合部分第一部分 公共基礎部分 一、單項選擇(90題,每題1分,共90分) 世界上第一臺電子計算機誕生于( )年。 A. 1956 B. 1946 C. 1944 D. 1940目前,第二代計…

Docker Eats Disk?

背景介紹下午 5:30&#xff0c;差不多到點打卡下班&#xff0c;準備好零食飲料&#xff0c;放松一下準備下班&#xff0c;然后...CI 構建失敗&#xff0c;經典的一幕&#xff01;&#xff01;&#xff01;無法從鏡像倉庫拉取鏡像&#xff0c;docker 正常運行&#xff0c;為什么…

C#網絡編程(訂立協議和發送文件) - Part.4

轉載自&#xff1a;http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 文件傳輸 前面兩篇文章所使用的范例都是傳輸字符串&#xff0c;有的時候我們可能會想在服務端和客戶端之間傳遞文件。比如&#xff0c;考慮這樣一種情況&#xff0c;假如客戶端…

Android Studio怎么設置懸浮提示文字框顯示函數

[摘要]AndroidStudio函數懸浮提示文字框設置方法一&#xff1a;AndroidStudio在默認情況下是不會和Eclipse那樣&#xff0c;鼠標移動到一個類或... Android Studio函數懸浮提示文字框設置方法一&#xff1a; Android Studio在默認情況下是不會和Eclipse那樣&#xff0c;鼠標移…

消息隊列入門(三)JMS標準及實現

消息中間件 消息中間件即Message-oriented middleware(MOM)&#xff0c;消息中間件利用高效可靠的消息傳遞機制進行平臺無關的數據交流&#xff0c;并基于數據通信來進行分布式系統的集成。 通過提供消息傳遞和消息排隊模型&#xff0c;消息中間件可以在分布式環境下擴展進程間…

C語言試題二十二之定義了3×3的二維數組,并在主函數中賦值。函數的功能使求出數組周邊元素的平均值并作為函數值返回給主函數中的s。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 定義了33的…

【專升本計算機】專升本計算機期末考試復習題(A卷附答案)

文章目錄 一、單選題(每空2分,共20分)。二、填空題(每空2分,共30分)。三、程序題(每小題10分,共50分)一、單選題(每空2分,共20分)。 世界上第一臺電子計算機誕生于( B )年。 A.1956?? B.1946?? C.1944?? D.1940以下不屬于數字計算機特點的是 C__ 。 A.運算…

spring定時任務的配置使用

spring的定時任務配置分為三個步驟&#xff1a; 1、定義任務 2、任務執行策略配置 3、啟動任務 1、定義任務 <!--要定時執行的方法--> <bean id"testTaskJob" class"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&qu…

【前端就業課 第二階段】CSS 零基礎到實戰(02)標簽類型、字體與圖片

整個前端學習路線 以下路線為 CSDN C認提供&#xff1a; 如果想 快點搞完 并且 就業 可以選擇超級實習生計劃 如果有技術想穩定點找工作&#xff0c;可以C認證&#xff0c;C認證還可以 內推、招聘會 &#xff0c;所以如果在校生想要穩一點&#xff0c;就可以選擇C認證或者超…

【SignalR全套系列】之在.Net6中實SignalR通信

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常實戰開發技巧&#xff0c;如需源碼 請公眾號后臺留言 源碼[如果覺得本公眾號對您有幫助&#xff0c;歡迎關注]前文回顧【SignalR全套系列】之在.NetCore中實現WebSocket雙工通信【SignalR全套系列】之在.Net Core 中實…

實踐1-qq郵箱主頁

純html的網頁 采用table分割板塊進行布局<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

解決adb調試顯示 Connected Device ************** [null]

或者有時候直接提示[UNAUTHORIZED……] 上邊的提示 Connected Device 中設備編號 后邊加了個[null]&#xff0c;意思是未授權&#xff0c;看下設備是否提示授權&#xff0c;如果沒看到提示&#xff0c;可以重新拔掉設備&#xff0c;重新連接接數據線&#xff0c;會彈出一個授權…