[MAUI] 开篇-初识MAUI_微软maui_厦门德仔的博客-程序员宅基地

技术标签: c#  # MAUI  android  MAUI  windows  

前言

在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
在这里插入图片描述 在这里插入图片描述

项目结构

Xamarin.Forms和.NET MAUI之间的主要区别在于它们的项目结构。

Xamarin.Forms MAUI
每个平台维护一个单独的项目 一个项目支持多个平台
平台相关的代码在不同项目中单独维护 在Platforms文件夹中维护
使用Xamarin.Forms,开发人员可能会在处理针对多个平台的多个项目时感到繁琐。图像,字体和平台相关代码的维护;添加不同的依赖项,并在它们被引用为 NuGet 包时解析它们。 遇到这些问题后,开发人员现在可以在 .NET MAUI 中通过单个项目得到解决。

由于 .NET MAUI 是一个简单的项目应用,因此它可以在基于多目标的结构上运行。.NET MAUI 应用包含一个 “Platforms” 文件夹,其子文件夹表示 Android、iOS Maccatalyst 和 Windows 等平台,以定位在平台上启动应用的特定于平台的代码。它也可以根据您自己的文件名进行多目标。

资源管理

.NET MAUI在资源方面接管了Xamarin,特别是在图像方面。您无需维护一组映像即可满足特定于平台或设备的需求。单个 SVG 图像足以满足所有平台和设备要求。SVG图像被转换为.png图像,以便在所有平台上工作。

Xamarin.Forms .NET MAUI
资源包括图像和类。 资源包括MauiImage和MauiResources等类。
需要为特定于平台的设备维护基于分辨率的图像。 借助 SVG 图像,无需维护特定于平台或特定于设备的图像。
需要为每个平台单独维护资源文件。 资源可以在单个位置进行维护。

图形绘制

在 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();
	}

环境配置

创建MAUI项目之前, 首先确保您的电脑已经安装MAUI开发选项
在这里插入图片描述

创建项目

在这里插入图片描述
设置项目名称以及解决方案保存位置, 完成创建。
在这里插入图片描述
创建完成后, 整个项目解决方案如下所示。
在这里插入图片描述

  • Platforms : 包含MAUI项目支持的所有平台
  • Resources : 项目中所用到的资源文件。如:图像、样式文件。
  • App.xaml
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/david_520042/article/details/128108504

智能推荐

高通MSM/QSD/QSC 的区别-程序员宅基地

转自 http://blog.csdn.net/myxmu/article/details/7985549

php 模板解析,PHP模板解析类_梧桐叶的梦的博客-程序员宅基地

class template {private $vars = array();private $conf = '';private $tpl_name = 'index';//如果模板不存在 会查找当前 controller默认index模板private $tpl_suffix = '.html';//如果CONFIG没配置默认后缀 则显示private $tpl_compile_suffix..._private $template;

DELETE 语句与 REFERENCE 约束 冲突 解决办法-程序员宅基地

/*报错为DELETE 语句与 REFERENCE 约束"FK_ProductInfo_Category"冲突。该冲突发生于数据库"eshop",表"dbo.ProductInfo", column 'CategoryId'。DELETE 语句与 REFERENCE 约束"FK_ShoppingCart_ProductInfo"冲突。该冲突发生于数据库"eshop",表"dbo.Sho

xmlspy xsd生成java_如何用xmlspy将xml文档生成xsd文件-程序员宅基地

所以我们有必要知道如何通过xmlspy这个非常方便的工具进行xml的转换工作。点击“File”-“New”系统会弹出“create new document”的窗口,此时选择“xml XML document”点击“ok”,并选择“Schema”单选框。粘贴你的样本xml。样板xml内容如下:StringStringStringStringStringStringStringStringStrin..._generate dtd/schema

IntentService(或非UI线程)中使用Toast-程序员宅基地

1.说明Toast要求必须再UI线程中才能显示,Service默认是再主UI线程上

ResNext架构解析:深度神经网络的聚合残差变换_resnext残差单元-程序员宅基地

我们提出了一种用于图像分类的简单、高度模块化的网络架构。我们的网络是通过重复一个构建块来构建的,该构建块聚合了一组具有相同拓扑的转换。我们简单的设计产生了一个同构的多分支架构,只需设置几个超参数。这个策略暴露了一个新的维度,我们称之为“基数”(转换集的大小),作为除了深度和宽度维度之外的重要因素。在 ImageNet-1K 数据集上,我们凭经验表明,即使在保持复杂性的限制条件下,增加基数也能够提高分类精度。此外,当我们增加容量时,增加基数比更深或更宽更有效。_resnext残差单元

随便推点

谷歌浏览器控制台获取元素坐标方法实例_获取浏览器弹出窗口坐标 ahk-程序员宅基地

谷歌浏览器控制台获取元素坐标方法实例1、以谷歌浏览器为例,找了好多实例但是没有找,琢磨了好几天终于找到答案,再次留下笔记;2、打开谷歌浏览器,以bing为例,网址:http:cn.bing.com,打开控制台Console,比如我们想查看"国内版"标签在浏览器上面的相对坐标,右键检查“&lt;div id="est_cn" class="est_selected"&gt;国内版&lt;/d..._获取浏览器弹出窗口坐标 ahk

docker查看容器完整command的命令_docker 查看容器的command-程序员宅基地

就是在显示容器列表的命令后面加上--no-trunc,大概是不省略的意思比如docker ps -a --no-trunc然后,本来是这样的会变成这样(上面那串是容器长id)当然大部分容器的命令是都是不同的,例子里用的是SQLstream。我试了一下,这段命令大概是分3段,第一段是"/bin/sh -C",第二段"/etc/init.d/startblaze"第三段"..._docker 查看容器的command

MEAN.IO创建者Amos Haviv:用一门语言统治一切-程序员宅基地

Amos Q. Haviv是一位软件工程师、技术顾问,他还是MEAN.IO和MEAN.JS的创建者。Amos有近十年的全栈开发经验,曾就职于多个创业公司和企业。从2011年起,Amos使用JavaScript的全栈解决方案进行开发,包括Node.js和MongoDB,以及AngularJS一类的前端MVC框架。2013年,他创建了MEAN..._amos是用什么语言开发的

使用Bloc状态管理--优化数据请求StatefulWidget转为StatelessWidget_bloc statelesswidget-程序员宅基地

官方文档链接: bloc添加依赖将bloc的包作为依赖项(dependencies) 添加到我们的pubspec.yaml中在bloc依赖库中选取合适的版本依赖 flutter_bloc: ^6.1.2dependencies: flutter: sdk: flutter http: ^0.12.2 json_annotation: ^3.1.1 # 此处为添加的依赖 flutter_bloc: ^6.1.2dev_dependencies: flutter_te_bloc statelesswidget

python3 muggle-ocr安装-程序员宅基地

python -m pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com muggle-ocr

【Kubernetes】The connection to the server <master>:6443 was refused - did you specify the right host ...-程序员宅基地

  不知道怎么用着用着,使用kubectl 时报错,错误如下:root@R740-2-2:~# kubectl get podThe connection to the server 107.105.136.28:6443 was refused - did you specify the right host or port?$systemctl status kubel...

推荐文章

热门文章

相关标签