[MAUI] 开篇-初识MAUI

news2024/11/28 18:06:53

前言

在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.FormsMAUI
每个平台维护一个单独的项目一个项目支持多个平台
平台相关的代码在不同项目中单独维护在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 : 跨平台移动应用程序的类
  • AppShell/MainPage : 默认模板项目Shell导航窗口
  • MauiProgram: 创建应用程序主机,初始化启动容器、服务以及构建。

启动项目

选择一个目标运行的平台, 启动项目。
在这里插入图片描述

如下,演示了Windows平台的启动项目。
在这里插入图片描述

Android模拟器

工具-Android-Android设备管理器
在这里插入图片描述
添加设备:手机或者平板,目前不支持TV,可能存在镜像问题报错:
只能多尝试几次或者自己做代理。
在这里插入图片描述

建议开启

如果提示HAXM错误,需要安装。
在这里插入图片描述
开启hype-v虚拟机,进行加速
在这里插入图片描述
在这里插入图片描述

项目运行

1.MAUI Windows
在这里插入图片描述
2.MAUI-Andriod
在这里插入图片描述

XAML是个啥

所有带ML的语言都差不多,标记语言嘛,各种标签描述。XAML简化了很多创建UI的过程。可以声明性的创建UI元素,然后对应一个cs文件去实现逻辑。
我个人理解应该属于前端:HTML:超文本标记语言 XML:可扩展标记语言
XAML:应该属于同一个语系,个人理解不要被我误导了哈哈!!!

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp1.MainPage">
			 
    <ScrollView>
        <VerticalStackLayout 
            Spacing="25" 
            Padding="30,0" 
            VerticalOptions="Center">
 
            <Image
                Source="dotnet_bot.png"
                SemanticProperties.Description="Cute dot net bot waving hi to you!"
                HeightRequest="200"
                HorizontalOptions="Center" />
                
            <Label 
                Text="Hello, World!"
                SemanticProperties.HeadingLevel="Level1"
                FontSize="32"
                HorizontalOptions="Center" />
            
            <Label 
                Text="Welcome to .NET Multi-platform App UI"
                SemanticProperties.HeadingLevel="Level2"
                SemanticProperties.Description="Welcome to dot net Multi platform App U I"
                FontSize="18"
                HorizontalOptions="Center" />
 
            <Button 
                x:Name="CounterBtn"
                Text="Click me"
                SemanticProperties.Hint="Counts the number of times you click"
                Clicked="OnCounterClicked"
                HorizontalOptions="Center" />
 
        </VerticalStackLayout>
    </ScrollView>
 
</ContentPage>

第一句:<? xml 1.0 utf-8 ?> 自报家门,解析的时候别整错了。
第二句:ContentPage 这个是一种布局。你可以设置各种布局。游戏常见的第一种,填表常见的第二种,新闻常见的第三种,微信常见的第四种。
在这里插入图片描述
再往后,xmlns=“http://schemas.microsoft.com/dotnet/2021/maui” 代表声明xaml 命名空间
xmlns:x=“http://schemas.microsoft.com/winfx/2009/xaml” 带别名的xml空间,通过别名可以访问该命名空间的对象
x:Class=“MauiApp1.MainPage” 代表xaml文件指向的类,cs写逻辑的时候就是通过对应的类。=》 public partial class MainPage : ContentPage

登录界面

采用Grid布局吧

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="120"/>
            <RowDefinition Height="80"/>
            <RowDefinition Height="40"/>
            <RowDefinition Height="40"/>
            <RowDefinition Height="60"/>
            <RowDefinition Height="40"/>

        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Image
                Source="logo.gif"
                SemanticProperties.Description="Cute dot net bot waving hi to you!"
                HeightRequest="100"
                WidthRequest= "200"
                HorizontalOptions="Center" Grid.Row="0" Grid.ColumnSpan="2"/>
        <Label
                Text="BarCode System"
                SemanticProperties.HeadingLevel="Level1"
                FontSize="26"
                HorizontalOptions="Center" Grid.Row="1" Grid.ColumnSpan="2"/>
        <Label Text="姓名" SemanticProperties.HeadingLevel="Level1" HorizontalOptions="End" Grid.Row="2" Grid.Column="0"/>
        <Entry x:Name="useCode"  Text="" Placeholder="请输入用户名" WidthRequest= "200" HorizontalOptions="Center"  Grid.Row="2" Grid.Column="1" Unfocused="useCode_Unfocused"/>
        <Label Text="密码" SemanticProperties.HeadingLevel="Level1" HorizontalOptions="End" Grid.Row="3" Grid.Column="0"/>
        <Entry x:Name="password" Text="" Placeholder="请输入密码" WidthRequest= "200"   IsPassword="True" Grid.Row="3" Grid.Column="1"/>
        <Label Text="公司" SemanticProperties.HeadingLevel="Level1" HorizontalOptions="End" Grid.Row="4" Grid.Column="0"/>
        <Picker x:Name="picker1" Title="请选择"

                HorizontalOptions="Center" WidthRequest= "200"  Grid.Row="4" Grid.Column="1"/>
        <Button
                x:Name="CounterBtn"
                Text="登录"
                SemanticProperties.Hint="Counts the number of times you click"
                Clicked="OnCounterClicked"
                WidthRequest= "200" 
                HorizontalOptions="Center" BackgroundColor ="Coral" Grid.Row="5" Grid.ColumnSpan="2"/>
    </Grid>

在这里插入图片描述

第一天学习,MARK!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48759.html

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

相关文章

Elasticsearch倒排索引

什么是正排索引&#xff1f; 如下图&#xff0c;有一张商品表&#xff08;tb_goods&#xff09;&#xff1a; 对于mysql数据库来说&#xff0c;肯定会给“id”创建主键索引&#xff0c;然后根据“id”来查询对应的商品信息&#xff0c;而这种情况就被称为“正排索引” 现在有…

eMagin:当月产百万片时,4K MicroOLED成本将不是问题

在今年2022 SID显示周期间&#xff0c;Micro OLED微显示模组厂商eMagin曾展示一款专为超短焦VR头显开发的4K Micro OLED微显示屏&#xff0c;有趣的是&#xff0c;该显示屏连接的主板上印有STEAMBOAT字样&#xff0c;让人不禁怀疑它与Valve之间是否存在某种联系。甚至有猜测认为…

【Linux】8.0 多线程

文章目录1.0 Linux线程概念1.1 Linux线程基本概念1.2 Linux线程优劣介绍2.0 Linux线程控制2.1 pthread_create(创建线程)2.2 pthread_join(线程等待)2.3 pthread_exit(线程终止)2.4 pthread_detach(线程分离)3.0 线程id和LWP的关系4.0 Linux线程互斥4.1 线程互斥相关概念4.2 线…

JUC系列(五) 读写锁与阻塞队列

&#x1f4e3; &#x1f4e3; &#x1f4e3; &#x1f4e2;&#x1f4e2;&#x1f4e2; ☀️☀️你好啊&#xff01;小伙伴&#xff0c;我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 &#x1f4d2; 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️&#xff0c;擅…

Qt第二十六章:Nuitka打包教程

Nuitka环境安装 ①下载gcc文件。提取码&#xff1a;8888百度网盘 请输入提取码 ②解压nuitka1.0.6版本&#xff0c;我们解压64位的。 ③设置环境变量 ④检测一下 gcc.exe --version 安装nuitka pip install nuitka pip install ordered-set 防止环境变量不生效&#xff0c;…

【Redis】Redis介绍

文章目录1.NoSQL数据库1.1NoSQL适用场景1.2常用的NoSQL1.3Redis介绍1.4Redis的使用场景1.5Redis默认按照目录1.6Redis的启动1.7Redis是单线程多路IO复用技术1.NoSQL数据库 NoSQL(NoSQL Not Only SQL )&#xff0c;意即“不仅仅是SQL”&#xff0c;泛指非关系型的数据库。 NoS…

学生HTML个人网页作业作品 (服装商城HTML+CSS)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 在线商城购物 | 水果商城 | 商城系统建设 | 多平台移动商城 | H5微商城购物商城项目 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&a…

RK3588平台开发系列讲解(Pinctrl篇)Pinctrl设备树介绍

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、 DTS介绍二、新建pinctrl三、引用pinctrl沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍pinctrl设备树的使用方法。 一、 DTS介绍 RK芯片的设备树⼀般把pinctrl节点放在soc…

元宇宙数字藏品,打造数字经济产业,实现全新业态升级

《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》提出以数字化转型整体驱动生产方式、生活方式和治理方式变革&#xff0c;催生新产业新业态新模式&#xff0c;壮大经济发展新引擎&#xff0c;将“虚拟现实和增强现实”列入了数字经济重点产业。 而自…

GAN生成漫画脸

最近对对抗生成网络GAN比较感兴趣&#xff0c;相关知识点文章还在编辑中&#xff0c;以下这个是一个练手的小项目~ (在原模型上做了&#xff0c;为了减少计算量让其好训练一些。) 一、导入工具包 import tensorflow as tf from tensorflow.keras import layersimport numpy a…

tinymce富文本编辑器做评论区

今天分享一下tinymce富文本编辑器做评论区的全过程。 文章目录一、介绍1.最终效果2.功能介绍3.主要项目包版本介绍&#xff1a;二、每个功能的实现1.自定义toolbar的功能区①对应的样式以及意义②对应的代码实现【忽略了一切非实现该功能的代码】2.展示、收起评论区①对应的样式…

ctf工具之:mitmproxy实践测试

1、安装居然使用的pip pip install mitmproxy 导入证书&#xff0c;密码为空 2、启用mitmweb pause 直接可以查看方式 搜索里输入login 对于http协议 直接看到了密码原文 3、后台日志方式 录入和回放 mitmdump -w baidu.txt pause 录制结束 mitmdump -nC baidu.txt paus…

如何设计可扩展架构

架构设计复杂度模型 业务复杂度和质量复杂度是正交的 业务复杂度 业务固有的复杂度&#xff0c;主要体现为难以理解、难以扩展&#xff0c;例如服务数量多、业务流程长、业务之间关系复杂 质量复杂度 高性能、高可用、成本、安全等质量属性的要求 架构复杂度应对之道 复杂…

MySQL备份与恢复

目录 一.数据备份的重要性 二.数据库备份的分类 2.1 物理备份 2.2 逻辑备份 2.3 完全备份&#xff08;只适合第一次&#xff09; 三.常见的备份方法 四.MySQL完全备份 4.1 MySQL完全备份优缺点 4.2 数据库完全备份分类 4.2.1 物理冷备份与恢复 五.完全备份 5.1 MySQ…

YOLO家族再度升级——阿里达摩院DAMO-YOLO重磅来袭

最近看到阿里达摩院发表了他们的最新研究成果&#xff0c;在YOLO系列上推出的新的模型DAMO-YOLO&#xff0c;还没有来得及去仔细了解一下&#xff0c;这里只是简单介绍下&#xff0c;后面有时间的话再详细研究下。 官方项目在这里&#xff0c;首页截图如下所示&#xff1a; 目…

ASEMI整流桥UD4KB100,UD4KB100体积,UD4KB100大小

编辑-Z ASEMI整流桥UD4KB100参数&#xff1a; 型号&#xff1a;UD4KB100 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;1000V 最大平均正向整流输出电流&#xff08;IF&#xff09;&#xff1a;4A 峰值正向浪涌电流&#xff08;IFSM&#xff09;&#xf…

堆(C语言实现)

文章目录&#xff1a;1.堆的概念2.堆的性质3.堆的结构4.接口实现4.1初始化堆4.2销毁堆4.3打印堆内元素4.4向上调整4.5向堆中插入数据4.6向下调整4.7删除堆顶元素4.8查看堆顶元素4.9统计堆内数据个数4.10判断堆是否为空4.11堆的构建1.堆的概念 如果有一个关键码的集合&#xff0…

【Redis】缓存更新策略

1. 缓存更新策略综述 内存淘汰 不用自己维护&#xff0c;利用 Redis 自己的内存淘汰机制 &#xff08;内存不足时&#xff0c;触发策略&#xff0c;默认开启&#xff0c;可自己配置&#xff09;&#xff0c;其可在一定程度上保持数据一致性 超时剔除 给数据添加 TTL&#x…

【电力运维】浅谈电力通信与泛在电力物联网技术的应用与发展

摘要&#xff1a;随着我国社会经济的快速发展&#xff0c;我国科技实力得到了巨大的提升&#xff0c;当前互联网通信技术在社会中得到了广泛的应用。随着电力通信技术的快速发展与更新&#xff0c;泛在电力物联网建设成为电力通讯发展的重要方向。本文已泛在电力物联网系统为核…

Docker使用

xshell和xftp软件下载 链接&#xff1a;https://pan.baidu.com/s/1G7DIw14UvOmTwU9SwtYILg 提取码&#xff1a;he18 --来自百度网盘超级会员V6的分享 docker相关资料&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1VcxvuJvBIKNKnUUHPlM3MA 提取码&#xff1a;6w5e …