欢迎使用.NET 多平台应用程序 UI。此版本标志着我们在统一 .NET 平台的多年旅程中的新里程碑。现在,您和超过 500 万其他 .NET 开发人员拥有面向 Android、iOS、macOS 和 Windows 的一流跨平台 UI 堆栈,以补充 .NET 工具链 (SDK) 和基类库 (BCL)。您可以使用 .NET 构建任何东西。

加入我们的Microsoft Build 2022,我们将向您介绍所有更新,以使用 .NET 和 Visual Studio 为任何设备构建本机应用程序。»了解更多

这只是我们创建令 .NET 开发人员满意的桌面和移动应用程序体验之旅的开始。对于下一阶段,现在为更广泛的 .NET 生态系统奠定了基础,将 .NET Framework 和旧项目系统中的插件、库和服务引入 .NET 6 和 SDK 样式项目。今天可用的有:

如需帮助将库迁移到 .NET 6,请查看最近的客座博客文章,详细介绍了Michael Rumpler (MR.Gestures) 和Luis Matos (Plugin.ValidationRules) 运送 .NET MAUI 库的体验。

当前 18 个月的发布计划完全支持 .NET MAUI 工作负载,并将按照与 .NET 相同的每月节奏提供服务。我们对 .NET MAUI 的持续关注仍然是质量、解决已知问题并根据您的反馈确定问题的优先级。这还包括我们为构建专门针对 Android、Android Wear、CarPlay、iOS、macOS 和 tvOS 的应用程序而交付的工作负载,这些应用程序直接使用来自 .NET 的本机工具包,以及支持库 AndroidX、Facebook、Firebase、Google Play Services 和斯基亚夏普。

使用 .NET MAUI,您可以实现不折不扣的用户体验,同时共享比以往更多的代码。.NET MAUI 通过每个平台提供的主要应用工具包、现代开发人员生产力和我们迄今为止最快的移动平台使用本机 UI。

原生 UI,不妥协

.NET MAUI 的主要目标是让您能够交付每个平台(Android、iOS、macOS、Windows 和 Tizen,感谢与三星的合作)专门设计的最佳应用体验,同时使您能够通过以下方式打造一致的品牌体验丰富的样式和图形。开箱即用,每个平台的外观和行为都符合其应有的方式,无需任何额外的小部件或样式来模仿。例如,Windows 上的 .NET MAUI 由WinUI 3提供支持,WinUI 3 是Windows App SDK附带的首要本机 UI 组件。

使用 C# 和 XAML 从包含 40 多个控件、布局和页面的丰富工具包构建您的应用程序。在移动控件的 Xamarin 肩膀上,.NET MAUI 增加了对多窗口桌面应用程序、菜单栏和新动画功能、边框、角落、阴影、图形等的支持。哦,还有BlazorWebView我将在下面重点介绍的新功能。

阅读 .NET MAUI 文档中有关控件的更多信息:页面、布局和视图

可访问性优先

使用原生 UI 的一个主要优势是继承的可访问性支持,我们可以在语义服务的基础上构建它,从而比以往更容易创建高度可访问的应用程序。我们与客户密切合作,重新设计我们开发可访问性的方式。从这些对话中,我们设计了 .NET MAUI语义服务来控制:

  • 描述、提示和标题级别等属性
  • 重点
  • 屏幕阅读器
  • 自动化属性

阅读 .NET MAUI 文档中有关可访问性语义服务的更多信息。

超越用户界面

.NET MAUI 提供简单的 API 来访问每个平台的服务和功能,例如加速度计、应用程序操作、文件系统、通知等等。在此示例中,我们配置“应用程序操作”,为每个平台上的应用程序图标添加菜单选项:

AppActions.SetAsync(
new AppAction("current_info", "Check Current Weather", icon: "current_info"),
new AppAction("add_location", "Add a Location", icon: "add_location")
);

阅读 .NET MAUI 文档中有关访问平台服务和功能的更多信息。

轻松定制

无论您是扩展 .NET MAUI 控件的功能还是建立新的平台功能,.NET MAUI 的架构都具有可扩展性,因此您永远不会碰壁。以Entry控件为例——一个在一个平台上呈现不同的控件的规范示例。Android 会在文本字段下方绘制下划线,开发人员通常希望删除该下划线。使用 .NET MAUI,Entry只需几行代码即可自定义整个项目中的每一个:

#if ANDROID
Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) =>
{
h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform());
});
#endif

这是最近由 Cayas Software 创建新地图平台控件的一个很好的示例。博客文章演示了为控件创建处理程序、为每个平台实现,然后通过在 .NET MAUI 中注册控件来使其可用。

.ConfigureMauiHandlers(handlers =>
{
handlers.AddHandler(typeof(MapHandlerDemo.Maps.Map),typeof(MapHandler));
})

阅读 .NET MAUI 文档中有关使用处理程序自定义控件的更多信息

现代开发人员生产力

.NET不仅仅是一种可以构建任何东西的技术,我们还希望 .NET 还可以使用通用语言特性、模式和实践以及工具来提高您的生产力。

.NET MAUI 使用 .NET 6 中引入的新 C# 10 功能,包括全局 using 语句和文件范围命名空间——非常有助于减少文件中的混乱和杂乱。.NET MAUI 以“单一项目”为重点,将多目标提升到了一个新的水平。

在新的 .NET MAUI 项目中,平台位于一个子文件夹中,将重点放在您花费大部分精力的应用程序上。在项目的 Resources 文件夹中,您可以在一个位置管理应用程序的字体图像应用程序图标启动画面、原始资源和样式。.NET MAUI 将针对每个平台的独特要求优化它们。

多项目与单项目仍然支持为每个平台构建您的解决方案,因此您可以选择单项目方法何时适合您的应用程序。

.NET MAUI 使用在 ASP.NET 和 Blazor 应用程序中流行于 Microsoft.Extensions 库的构建器模式作为初始化和配置应用程序的单一位置。从这里,您可以为 .NET MAUI 提供您的字体、利用平台特定的生命周期事件、配置依赖项、启用特定功能、启用供应商控制工具包等。

public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureServices()
.ConfigureFonts(fonts =>
{
fonts.AddFont("Segoe-Ui-Bold.ttf", "SegoeUiBold");
fonts.AddFont("Segoe-Ui-Regular.ttf", "SegoeUiRegular");
fonts.AddFont("Segoe-Ui-Semibold.ttf", "SegoeUiSemibold");
fonts.AddFont("Segoe-Ui-Semilight.ttf", "SegoeUiSemilight");
}); return builder.Build();
}
}
public static class ServicesExtensions
{
public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder)
{
builder.Services.AddMauiBlazorWebView();
builder.Services.AddSingleton<SubscriptionsService>();
builder.Services.AddSingleton<ShowsService>();
builder.Services.AddSingleton<ListenLaterService>();
#if WINDOWS
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Windows.NativeAudioService>();
#elif ANDROID
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Android.NativeAudioService>();
#elif MACCATALYST
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.MacCatalyst.NativeAudioService>();
builder.Services.TryAddSingleton< Platforms.MacCatalyst.ConnectivityService>();
#elif IOS
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.iOS.NativeAudioService>();
#endif builder.Services.TryAddTransient<WifiOptionsService>();
builder.Services.TryAddSingleton<PlayerService>(); builder.Services.AddScoped<ThemeInterop>();
builder.Services.AddScoped<ClipboardInterop>();
builder.Services.AddScoped<ListenTogetherHubClient>(_ =>
new ListenTogetherHubClient(Config.ListenTogetherUrl)); return builder;
}
}

在 .NET MAUI 文档中阅读有关使用 MauiProgram单个项目启动应用程序的更多信息。

将 Blazor 带入桌面和移动设备

.NET MAUI 也非常适合希望通过本机客户端应用程序参与其中的 Web 开发人员。.NET MAUI 与Blazor集成,因此您可以直接在本机移动和桌面应用程序中重用现有的 Blazor Web UI 组件。使用 .NET MAUI 和 Blazor,您可以重用您的 Web 开发技能来构建跨平台的本机客户端应用程序,并构建跨移动、桌面和 Web 的单一 UI。

.NET MAUI 在设备上本地执行 Blazor 组件(不需要 WebAssembly)并将它们呈现到嵌入式 Web 视图控件。由于您的 Blazor 组件在 .NET 进程中编译和执行,因此它们不限于 Web 平台,并且可以利用任何本机平台功能,例如通知、蓝牙、地理位置和传感器、文件系统等等。您甚至可以在 Blazor Web UI 旁边添加本机 UI 控件。这是一种全新的混合应用程序:Blazor Hybrid!

开始使用 .NET MAUI 和 Blazor 很简单:只需使用随附的 .NET MAUI Blazor 应用程序项目模板。

此模板已全部设置好,因此您可以开始使用 HTML、CSS 和 C# 构建 .NET MAUI Blazor 应用程序。.NET MAUI的Blazor Hybrid 教程将引导您构建和运行您的第一个 .NET MAUI Blazor 应用程序。

或者在您想开始使用 Blazor 组件的任何位置向现有 .NET MAUI 应用添加控件:BlazorWebView

<BlazorWebView HostPage="wwwroot/index.html">
<BlazorWebView.RootComponents>
<RootComponent Selector="#app" ComponentType="{x:Type my:Counter}" />
</BlazorWebView.RootComponents>
</BlazorWebView>

Blazor Hybrid 支持现在也可用于 WPF 和 Windows 窗体,因此您可以开始对现有桌面应用程序进行现代化改造以在 Web 上运行或使用 .NET MAUI 跨平台运行。WPF 和 Windows 窗体的BlazorWebView控件在 NuGet 上可用。查看WPFWindows 窗体的 Blazor Hybrid 教程,了解如何开始。

若要详细了解 Blazor Hybrid 对 .NET MAUI、WPF 和 Windows 窗体的支持,请查看Blazor Hybrid 文档

针对速度进行了优化

.NET MAUI 专为提高性能而设计。您已经告诉我们,让您的应用程序尽快启动非常重要,尤其是在 Android 上。.NET MAUI 中的 UI 控件在本机平台控件上实现了一种精简的、解耦的处理程序映射器模式。这减少了 UI 渲染中的层数,并简化了控件定制。

.NET MAUI 中的布局已被设计为使用一致的管理器模式,该模式可优化度量并安排循环以更快地呈现和更新您的 UI。我们还展示了针对特定场景预先优化的布局,HorizontalStackLayout例如VerticalStackLayout.StackLayout

从这个旅程的一开始,我们就设定了一个目标,即在过渡到 .NET 6 时提高启动性能并保持或减小应用程序大小。在 GA 时,我们已经实现了 34.9% 的 .NET MAUI 和 39.4 改进.NET for Android 的改进百分比。这些收益也扩展到复杂的应用程序;.NET Podcast 示例应用程序的启动时间为 1299 毫秒,GA 时为 814.2 毫秒,自 Preview 13 以来提高了 37.3%。

默认情况下启用这些设置以提供具有这些优化的发布版本。

请继续关注我们为实现这些结果所做的深入博客文章。

今天开始

要开始在 Windows 上使用 .NET MAUI,请安装 Visual Studio 2022 Preview 或将其更新到版本 17.3 Preview 1.1。在安装程序中,选择工作负载“.NET Multi-platform App UI development”。

要在 Mac 上使用 .NET MAUI,请安装适用于 Mac 的新 Visual Studio 2022预览版(17.3 预览版 1)。

Visual Studio 2022 将在今年晚些时候支持 GA .NET MAUI 工具。在今天的 Windows 上,您可以使用 XAML 和 .NET Hot Reload 以及用于 XAML、C#、Razor 和 CSS 等的强大编辑器来加速您的开发循环。使用 XAML 实时预览和实时可视树,您可以预览、对齐、检查您的 UI,并在调试时对其进行编辑。.NET MAUI 的新单项目体验现在包括项目属性页,可提供可视化编辑体验,以便为您的应用配置多平台定位。

在 Mac 上,您现在可以加载单项目和多项目 .NET MAUI 解决方案,以使用漂亮的全新原生 Visual Studio 2022 for Mac 体验进行调试。用于提高您开发 .NET MAUI 应用程序的生产力的其他功能将在后续预览版中提供。

我们建议立即开始将您的库更新为 .NET MAUI 并创建新的 .NET MAUI 项目。在深入研究将 Xamarin 项目转换为 .NET MAUI 之前,请查看您的依赖项、Visual Studio 对 .NET MAUI 的支持状态以及已发布的已知问题,以确定转换的正确时间。请记住,现代生命周期策略将继续支持 Xamarin ,该策略声明距上一个主要版本还有 2 年。

资源

我们需要您的反馈

我们很乐意听取您的意见!当您遇到任何问题时,请在 GitHub 上的dotnet/maui提交报告。

概括

使用.NET MAUI,您可以使用在 .NET 中实践的相同生产力模式,从单个代码库构建适用于 Android、iOS、macOS、Tizen 和 Windows 的本机应用程序。.NET MAUI 的瘦且分离的 UI 和布局架构以及单个项目功能使您能够专注于一个应用程序,而不是同时处理多个平台的独特需求。借助 .NET 6,我们不仅为 Android 提供了性能改进,而且还针对所有平台目标进行了改进。

更少的平台代码、更多的共享代码、一致的标准和模式、轻量级和高性能架构、移动和桌面原生体验——这仅仅是开始。我们期待在接下来的几个月中看到库和更广泛的生态系统与 .NET MAUI 一起为 .NET 开发人员定义跨平台应用程序开发的新时代,使您和您的组织能够实现更多目标。

.NET MAUI 简介的更多相关文章

  1. Blazor Hybrid / MAUI 简介和实战

    1. Blazor Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的服务 ...

  2. MAUI与Blazor共享一套UI,媲美Flutter,实现Windows、macOS、Android、iOS、Web通用UI

    1. 前言 距离上次发<MAUI初体验:爽>一文已经过去2个月了,本计划是下半年或者明年再研究MAUI的,现在计划提前啦,因为我觉得MAUI Blazor挺有意思的:在Android.iO ...

  3. MAUI Blazor 权限经验分享 (定位,使用相机)

    入门文章 Blazor Hybrid / MAUI 简介和实战 https://www.cnblogs.com/densen2014/p/16240966.html 在 Mac 上开发 .NET MA ...

  4. .NET MAUI 安卓应用开发初体验

    一..NET MAUI开发环境搭建&安卓SDK和安卓模拟器安装提示网络连接失败问题解决 引言 本节目标是帮助第一次搭建.NET MAUI开发环境,在下载安卓SDK和安卓模拟器过程中一直提示网络 ...

  5. (原创)【B4A】一步一步入门01:简介、开发环境搭建、HelloWorld

    一.前言 作者注:絮絮叨叨,可跳过不看. 一直有开发跨平台软件的需求.因为我的主力是C# ,所以当MAUI出现后,我欣喜若狂的开始学习研究.但是经历了两个月左右的时间,我弃坑了,我发现MAUI不是我能 ...

  6. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  7. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  8. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  9. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  10. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

随机推荐

  1. Nacos 1.2.1 集群搭建(二)MySQL、cluster 配置

    三台虚机的IP地址被DHCP重分了一下1.MySQL 配置 先建一个 nacos_config 数据库 将SQL执行(方法很多,选自己喜欢的就行) 2.修改 application.propertie ...

  2. AtCoder Beginner Contest 217 D~E

    比赛链接:Here ABC水题, D - Cutting Woods 题意:开始一根木棒长度为 \(n\) 并以 \(1\) 为单位在木棒上标记\((1\sim n)\) ,输出 \(q\) 次操作 ...

  3. 洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包

    本文学习自洛谷社区 喜提CCPC2021网络赛原题 题意相当于是要在每一列中选若干个砖块打掉,消耗所需的子弹数并得到对应的得分.最大化k个子弹能得到的最大得分. 预处理出第 \(i\) 列 \(j\) ...

  4. 【每日一题】20.K-th Number (二分 + 尺取)

    关于此题,我们分析一下: 一个区间第k大的数不小于x的条件是什么? 答案就是一个区间内不小于x的数的个数不小于k 那么,我们就会发现,我们其实并不需要知道每个数的值,实际上对我们有用的只有每个数与x的 ...

  5. 2020年第十一届蓝桥杯省赛 第一场(7月5日)B组个人题解

    PDF文件下载: https://files.cnblogs.com/files/Angel-Demon/CB.zip 试题 A: 跑步训练 [问题描述] 小明要做一个跑步训练. 初始时,小明充满体力 ...

  6. vue学习笔记 二、环境搭建+项目创建

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  7. Linux: CPU C-states

    0. Overview There are various power modes of the CPU which are determined based on their current usa ...

  8. docker 镜像管理之 overlay2 最佳实践

    1. Docker 镜像 Docker 镜像是个只读的容器模板,它组成了 Docker 容器的静态文件系统运行环境 rootfs,是启动 Docker 容器的基础. Docker 镜像是容器的静态视角 ...

  9. RL 基础 | 讲的很好的 TRPO 博客

    特意存档: 知乎 | 如何看懂TRPO里所有的数学推导细节? 感觉把 idea 讲的很清楚(虽然没有特别仔细看-

  10. maven总结三: 常用插件

    本文为博主原创,转载请注明出处: 目录: 1. maven-release-plugin 2. maven-compiler-plugin 3. maven-assembly-plugin 4. sp ...