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.mzph.cn/news/286304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ivx动效按钮 基础按钮制作 02

本节示例&#xff1a; 一、特效块的制作 在上一节中制作了一个可以增加动效的自定义按钮后&#xff0c;这一节通过这个行按钮对其进行特效制作。 在行按钮中的绝对定位中&#xff0c;我们创建一个行&#xff0c;命名为移入&#xff0c;接下来我们做一个移入动效&#xff1a…

最新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…

【前端就业课 第二阶段】CSS 零基础到实战(02)列表

整个前端学习路线 以下路线为 CSDN C认提供&#xff1a; 如果想 快点搞完 并且 就业 可以选择C认证&#xff0c;C认证还可以 内推、招聘会 &#xff0c;所以如果在校生想要稳一点&#xff0c;就可以选择C认证或者超级实习生计划&#xff0c;贼稳&#xff01; 链接在这PC端&…

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;消息中间件可以在分布式环境下扩展进程间…

【前端就业课 第二阶段】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;会弹出一个授权…

Java 解析XML的几种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。 XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。 基本的解析方式有两种,一种叫SAX&#xff0c;另一种叫DOM。 SAX是基于事件流的解析,DOM是…

【前端就业课 第二阶段】CSS 零基础到实战(03)前端 CSS 动效 transition transform

本系列文章持续更新&#xff0c;点击专栏就可以看其他文章&#xff1a;点击进入专栏 整个前端学习路线 以下路线为 CSDN C认提供&#xff1a; 如果想 快点搞完 并且 就业 可以选择超级实习生计划 如果有技术想稳定点找工作&#xff0c;可以C认证&#xff0c;C认证还可以 内…

C#基于.Net-HtmlAgilityPack库的爬虫初体验

讲故事前几天有点空闲时间&#xff0c;在github上看一些.Net的开源库&#xff0c;看到了关于爬虫相关的库&#xff0c;于是加入了一个QQ群&#xff0c;看到里面各位大佬讨论的是爬的越好&#xff0c;进去越快&#xff0c;于是我自己也想做一个爬虫相关的东西&#xff0c;但是爬…

Android中文图混排时文图的居中对齐 FontMetrics以及自定义ImageSpan实现

文章转自&#xff1a;http://www.sohu.com/a/150059234_611601 本文作者CnPeng的博客地址&#xff1a; http://www.jianshu.com/p/2650357f7547 这个标题有点长&#xff0c;乍一看这么个标题你可能没明白啥意思&#xff0c;且听我慢慢道来。 公司的项目中新增了一个“心动”…

关于事件监听机制的总结(Listener和Adapter)

记得以前看过事件监听机制背后也是有一种设计模式的.(设计模式的名字记不清了,只记得背后实现的数据结构是数组.) 附上事件监听机制的分析图: 一个事件源可以承载多个事件(只要这个事件源支持这个事件就可以,男人就不支持生孩子的事件) 事件和监听器有对应关系的. 下面用awt中…

一、首页、详情页、文章编辑页制作《iVX低代码/无代码个人博客制作》

注&#xff1a;iVX也有免费直播课《第八期直播课》 一、首页制作 首页预览如下&#xff1a; 首先在博客页创建一个相对应项目&#xff1a; 接着选择前台&#xff0c;创建一个页面&#xff0c;命名为首页&#xff1a; 接着更改当前屏幕为小屏尺寸&#xff1a; 接着我们分…

Saga体系结构模式:微服务架构下跨服务事务的实现

在服务端应用程序中&#xff0c;我们往往会通过事务处理来保证数据一致性&#xff08;Data Consistency&#xff09;&#xff0c;例如&#xff1a;当用户从库存中取走了一定数量的物品&#xff0c;这些物品会体现在用户的提货单上&#xff0c;与此同时&#xff0c;库存中物品的…

GPhone、OPhone、UPhone、APhone、IPhone:满城尽带XPhone

本文为原创&#xff0c;如需转载&#xff0c;请注明作者和出处&#xff0c;谢谢&#xff01; 最近一段时间智能手机市场是翻天覆地。各大厂商纷纷推出自己的手机操作系统和手机。Google、Apple、中国移动、中国联通纷纷推出或即将推出自已 的智能手机操作系统&#xff08;虽…