.NET MAUI 跨平台应用的架构(三)

news/2025/1/17 10:50:35/文章来源:https://www.cnblogs.com/luobo6666/p/18676496

描述 .NET MAUI 体系结构

已完成200 XP

跨平台应用开发使用的一种常见模式是考虑用户界面中的业务逻辑,然后为每个平台开发单独的用户界面和 UI 逻辑。 虽然每种类型的设备的业务逻辑保持不变,但驱动应用和显示数据的代码可能会有所不同。 出现这种差异是因为设备所提供的功能、API 和特性不相同。 以这种方式构建多平台应用不仅需要处理单独的软件开发工具包 (SDK),还需要处理完全不同的语言和工具集。

.NET MAUI(多平台应用程序用户界面)的目的是简化多平台应用开发。 使用 .NET MAUI,可以使用单个项目创建多平台应用,但可以根据需要添加特定于平台的源代码和资源。 .NET MAUI 的主要目的是使你能够在单个代码库中实现尽可能多的应用程序逻辑和 UI 布局。

在本单元中,你将了解 .NET MAUI 的体系结构以及生成 .NET MAUI 应用程序所需的工具。

什么是 .NET MAUI 技术堆栈?

.NET 提供了一系列特定于平台的框架,用于创建应用:.NET for Android、.NET for iOS(和 iPadOS)、.NET for Mac 和 WinUI 3(使用 Windows 应用 SDK)。 这些框架均有权访问相同的 .NET 6 基类库 (BCL)。 该库提供了创建和管理资源,以及从代码中抽象出基础设备的详细信息的功能。 BCL 依赖于 .NET 运行时来为代码提供执行环境。 Mono,一种 .NET 运行时的开源实现,可实现 Android、iOS(以及 iPadOS)和 macOS 环境。 在 Windows 上,Win32 起到相同的作用,只是它针对 Windows 平台进行了优化。

虽然 BCL 使在不同类型的设备上运行的应用程序能够共享常见的业务逻辑,但各种平台定义应用程序用户界面的方式各不相同。 这些平台提供了不同的模型来指定用户界面元素如何通信和互操作。 可以使用适当的特定于平台的框架(.NET for Android、.NET for iOS、.NET for Mac 或 WinUI 3)单独为每个平台创建 UI。 但此方法要求你为每个单独的设备系列维护一个代码库。 .NET MAUI 提供了用于为移动应用程序和桌面应用程序构建 UI 的单一框架。 可以使用此框架(如下图中的箭头 1 所示)创建 UI,.NET MAUI 负责将其转换为适当的平台(箭头 2)。

有时可能需要实现特定于平台的功能。 在这些情况下,可以调用特定于平台的框架中的方法,如下图中箭头 3 突出显示的那样。

示意图显示 .NET MAUI 技术堆栈和实现平台特定功能的方式。

.NET MAUI 的工作原理是什么?

.NET MAUI 从 UI 元素的逻辑说明中抽象出该元素的实现。 可以使用 XAML (Extensible Application Markup Language) 描述 UI,这是一种基于 XML 的平台中性语言。 例如,下面的 XAML 片段展示了一个按钮控件的说明:

XML
<Button Text="Click me"SemanticProperties.Hint="Counts the number of times you click"Clicked="OnCounterClicked"HorizontalOptions="Center" />

此示例定义按钮的标签(“Click me”),并指定当用户选择该按钮时,应运行名为 OnCounterClicked 的方法。 其他属性可以修改按钮和文本的布局;在此示例中,文本位于按钮的中心。 语义属性为具有视觉障碍的用户提供辅助功能支持。

.NET MAUI 始终为目标设备生成本机代码,因此你可以获得最佳性能。 .NET MAUI 使用特定于每个平台和 UI 元素的“处理程序”来执行操作。 例如,如果为应用面向 iOS,则 .NET MAUI 处理程序会将此代码映射到 iOS UIButton。 如果在 Android 上运行,则会获得 Android AppCompatButton。 这些处理程序通过 .NET MAUI 提供的特定于控件的接口间接访问,例如按钮的 IButton

示意图显示 .NET MAUI 如何将 XAML 控件映射到本机控件。此图展现了 .NET MAUI 控件实现了每个本机处理程序也会实现的接口。

 备注

还可以根据偏好使用 C# 代码动态创建 UI。 此方法使你可以根据环境修改布局。 例如,如果用户没有适当的授权级别,你可能不希望显示某些控件。

借助 .NET MAUI,可以轻松访问按钮等常用控件。 还可同样轻松地访问其他常用控件(如文本输入字段、标签和日期选取器)。 但是,各个控件仍不足以成为可用于创建丰富应用的良好平台。 .NET MAUI 还提供:

  • 用于设计页的精心布局引擎。
  • 用于创建丰富导航类型的多种页类型,如抽屉。
  • 对数据绑定的支持,以便实现更简洁且可维护性更高的开发模式。
  • 创建自定义处理程序,以增强 UI 元素的显示方式的能力。
  • 对本机 API 的直接访问,以及与 UI 分离的移动应用和桌面应用的许多常见需求的抽象。 概要库使应用能够访问 GPS、加速计、电池和网络状态等内容。 通过此库,还可以使用在移动开发中常见的数十种传感器和服务。

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

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

相关文章

加速 AI 训推:Lepton AI 如何构建多租户、低延迟云存储平台

Lepton AI 是一款面向开发者的 AI 平台,旨在提供易用、高效且可扩展的基础设施能力。该平台适用于各种训练、推理需求,GPU充足,在保证高性能的同时,能够灵活应对不断变化的工作负载。用户可以快速在 Lepton 平台上部署推理服务和执行训练任务,无需关注基础设施和稳定性问题…

Desk-群晖关闭局域网发现.210607

套件中心-媒体服务器,卸载。.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0px } .zsleft { float: left } .zsdiv { display: flex; flex-flow:column; } .zs { font-siz…

基于SOA自动驾驶整车及运营系统架构

经纬恒润通过多年的技术积累和研发实践,运用面向服务的架构(Service Oriented Architecture,SOA)设计思想和理念,设计、打造可持续集成、灵活配置和持续升级的自动驾驶整车乃至整个运营系统,可为客户提供面向封闭区域运营的完整自动化解决方案。概述随着车辆智能化、信息…

Gitbook在Docker中安装插件的方法.210603

别光在那百度,什么先book.json添加plugin,然后在install? 哥,你现在用的是docker哎,docker都启动不了,你如何gitbook install呢? 乖乖听我的,按我的方法来!1. docker中使用npm安装插件 [root@it gitbook]# docker exec gitbook npm install gitbook-plugin-back-to-to…

IDEA如何将没用到的包移除掉?

前言 大家好,我是小徐啊。我们在使用IDEA开发的时候,都是需要导入各种各样的依赖包的,这些依赖包是我们开发Java应用的时候必不可少的。不过,有时候,当我们不需要某些依赖的时候,可能我们删除了相应的代码,但是对于上方的引入的包没有删除,虽然这不会对代码运行产生影响…

使用awk命令5秒替换700M文件内容

windows用户安装git工具的话就自带了 linux用户应该都自带了 我本地有一个1百万行的sql,需要替换表名,发现vscode无法替换,提示文件太大,所以改用awk这个工具。 命令如下: awk -i inplace {gsub("<table_name>", "u_user")} 1 无标题2.sql 我这…

在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多线程技术的高性能实践

阿里云真贵啊。我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今的 QPS 突破 240 次/秒,连接数突破 4000,日请求数接近 1000 万。在这篇文章中,我将简要介绍我在技术上做了哪些工作,我是如何做到的。…

极空间使用clouddrive2 docker挂载115(SSH版)

极空间开通SSH了,因此可以用clouddrive2将115挂载到极空间并在“个人空间”中看到了。 按照官方教程,用docker-compose或者docker cli命令进行部署即可。 具体部署步骤极空间打开SSH(系统设置-远程协助/SSH)。 使用SSH工具如XTerminal等进入SSH,端口为开启SSH时设置的端口…

CentOS7.8安装k8s.210708

1, 安装 docker / kubelet # 在 master 节点和 worker 节点都要执行 # 最后一个参数 1.20.6 用于指定 kubenetes 版本,支持所有 1.20.x 版本的安装 # 腾讯云 docker hub 镜像 # export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com" # DaoCloud 镜像 # e…

docker中修改wordpress上传文件大小.210709

进入docker docker exec -it wordpress /bin/bash root@1d8a4fbdaa6b:/var/www/html# cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini root@1d8a4fbdaa6b:/var/www/html# cd /usr/local/etc/php root@1d8a4fbdaa6b:/usr/local/etc/php# apt-get update …

数字孪生建筑智慧运维系统

在智慧城市的建设浪潮中,数字孪生技术以其独特的优势,成为推动城市智慧化发展的重要力量。数字孪生建筑智慧运维系统,通过构建建筑的数字副本,实现对建筑全生命周期的实时监控、分析和优化,为建筑运维提供决策支持,提高建筑的能效和安全性,降低运维成本。 建设内容阐述1…

主机防护如何更安全、高效? HSS新增多种特性,让你少走弯路

华为云企业主机安全12月新版本现已上线!此次更新重点针对RASP检测、CI/CD安全防护、容器防逃逸、资产基线检测进行了优化增强。 阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手…