讲师中心 微信公众号
AI工具推荐 视频效率加速

maui 是什么 .net maui开发入门

大婷酱_9076

大婷酱_9076

发布时间:2026-01-24 11:17:02

|

979人浏览过

|

来源于php中文网

原创

.NET MAUI是微软推出的原生跨平台UI框架,用C#和XAML一套代码编译为Android、iOS、Windows、macOS的原生控件;需dotnet 8.0+、安装maui workload,首屏由App.xaml.cs中MainPage=...指定,导航需NavigationPage或AppShell支持,热重载仅限部分XAML变更。

maui 是什么 .net maui开发入门

.NET MAUI 就是微软推出的、用 C# 和 XAML 写一套代码就能跑在 Android、iOS、Windows、macOS 四个平台上的原生跨平台 UI 框架——它不是“模拟器”或“WebView 壳”,而是把你的 Button、Label、ListView 等控件,实时翻译成各平台真正的原生控件(比如 iOS 的 UIButton、Windows 的 WinUI Button),所以性能和体验接近原生。

它不是 Xamarin.Forms 的“升级补丁”,而是重写:控件层全换、渲染路径更短、项目结构彻底扁平化(单项目,不再有 .iOS/.Android 多项目嵌套)。


怎么快速验证自己环境能跑起来

别急着建项目,先确认基础链路通不通:

dotnet --version
# 必须 ≥ 8.0(推荐 9.0,2025 年底已稳定)
dotnet workload list | findstr maui
# 应看到类似:maui, maui-android, maui-ios, maui-windows...
dotnet new maui -n TestApp && cd TestApp && dotnet build

如果 dotnet build 报错说缺 workload,就立刻补:

dotnet workload install maui

常见坑:Visual Studio 2022 17.8+ 安装时没勾选「.NET Multi-platform App UI 开发」——这会导致命令行能装 workload,但 VS 里新建项目模板不出现。必须重进 VS Installer → 修改 → 勾上它,再重启 VS。


创建第一个可运行的页面,关键三处不能漏

新建项目后,真正让 App 启动并显示内容,靠的是这三个文件协同:

  • App.xaml:定义全局资源字典(比如主题色、字体),它本身不决定“哪个页面先显示”
  • App.xaml.cs:里面 public partial class App : Application 类,它的构造函数里有一句关键代码:
    public App()
    {
        InitializeComponent();
        MainPage = new AppShell(); // ← 这行决定了首屏!
    }
    
  • MainPage.xaml(或 AppShell.xaml):实际渲染的根页面。如果你删了 AppShell 改用 MainPage,就得同步改 MainPage = new MainPage()

常见错误现象:

  • 启动黑屏 / 白屏 → 检查 MainPage = ... 是否被注释或指向 null
  • 编译通过但 Windows 上报错 “WinUI 3 runtime not found” → 需在 Windows 设置中开启「开发者模式」(设置 → 系统 → 针对开发人员 → 开启)

导航跳转为什么点不动?Navigation.PushAsync 失效的典型原因

Navigation.PushAsync(new DetailPage()) 不生效,90% 是因为当前页面根本不在导航栈里。

windows-auto
windows-auto

Windows 桌面自动化技能,支持鼠标控制(移动/点击/拖拽/滚轮/截图)、键盘输入(文字输入/按键/组合键)、窗口管理(查找/聚焦/最大化/最小化/关闭/移动)、截图并发送文件。提供两种截图方式:Python pyautogui 截图(集成在自动化流程中)和 PowerShell + .NET 零依赖截图(支持区域截图和多显示器)。当用户需要自动化 Windows 桌面操作、控制鼠标键盘、管理窗口、执行 GUI 自动化任务、截图发送文件时使用。

下载

MAUI 要求:只有从 NavigationPage 包裹的页面出发,才能用 Navigation 属性跳转。

正确做法(两种):

  • 方式一(推荐):在 App.xaml.cs 中这样设:
    MainPage = new NavigationPage(new MainPage());
    
  • 方式二:用 AppShell(默认模板就是它),它内部自带导航容器,你只需确保跳转代码写在继承自 ContentPage 的页面里,且调用时上下文是有效的页面实例(比如在按钮点击事件里)。

容易忽略的细节:

  • 在 App.OnStart() 或静态方法里直接调用 Navigation.PushAsync → 会抛 NullReferenceException,因为此时没有当前页面上下文
  • 使用 Shell.Current.GoToAsync("//detail") 是另一套路由系统,和 Navigation 不互通,混用会迷路

热重载(Hot Reload)为什么改了 XAML 没反应?

热重载不是万能的,它只对以下修改实时生效:

  • Text、BackgroundColor、FontSize 等属性值变更
  • 添加/删除简单控件(如加一个 Label)

但以下情况必须重新编译:

  • 修改 ViewModel 的属性或绑定逻辑
  • 更改页面继承关系(比如把 ContentPage 改成 TabbedPage)
  • 动态加载资源(如通过 ResourceManager 切语言)

另外:Windows 上热重载默认只对 WinUI 生效;Android/iOS 模拟器需确保启用「Hot Reload on File Save」并在调试状态下运行(F5 启动,不是 Ctrl+F5)。

最常被卡住的一点:改完 MainPage.xaml 后保存,但当前正在看的是 DetailPage ——热重载只刷新当前激活页面,不会自动跳回去。

热门AI工具

更多
超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6307

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2648

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4216

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

306

2025.12.06

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3339

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2898

2023.07.27

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.9万人学习

Java 教程
Java 教程

共578课时 | 194.7万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 9.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn