我们发布了.NET多平台应用程序用户界面(.NET MAUI)候选发布版3,其中有一批新的改进。与以前的候选发布版一样,RC3由 "上线 "支持政策覆盖,这意味着.NET MAUI得到了微软对你的生产应用的支持。

要开始使用.NET MAUI,请安装或升级到最新的Visual Studio 2022预览版,并选择".NET多平台应用程序UI开发 "工作负载。这将安装所有你需要的.NET 6件,再加上启用预览版的功能,使你的.NET MAUI开发经验更有成效。
关于将Xamarin库迁移到.NET 6和.NET MAUI的指导,请查看Xamarin博客上的这些提示,以及5月份的.NET MAUI社区研讨会,Brandon Minnick讨论了将Xamarin社区工具包迁移到.NET MAUI。
专注于导航
.NET MAUI为你提供了2种在你的应用程序中实现导航的主要方式。最简单而有力的选择是在Shell ,它提供了为桌面和移动模式优化的细节。第二个选择是直接使用基本的导航页面控件。FlyoutPage,TabbedPage, 和NavigationPage。
| 外壳 | 基础控件 | |
|---|---|---|
| 浮动控件 | 有 | 有 |
| 标签 | 是 | 是 |
| 导航 | 基于URI | 推送/弹出 |
| 数据传输 | 基于URI的 | 视图模型 |
| 可模板化 | 是的 | 不可以 |
你应该使用什么?.NET MAUI的新项目模板实现了Shell ,并提供了优化的体验,所以我们推荐你从这个模板开始使用。如果将来你想换成特定的控件,你仍然可以重用你的所有UI。Shell 是一个UI控件,它承载了你的应用程序页面,并提供了飞出和标签菜单。
模板项目包括一个带有单个页面的 "AppShell.xaml",它被分配给App.MainPage 。要看到飞出的效果,只需添加更多的页面,并通过改变Shell.FlyoutBehavior ,启用浮动控件:
<Shell
x:Class="MauiApp2.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiApp2"
Shell.FlyoutBehavior="Flyout">
<ShellContent
Title="Home"
ContentTemplate="{DataTemplate local:MainPage}"
Route="MainPage" />
<ShellContent
Title="Items"
ContentTemplate="{DataTemplate local:ItemsPage}"
Route="ItemsPage" />
</Shell>

ShellContent 你可以描述用于导航的URI路线,并使用数据模板,这样你的页面就可以按需加载,以保持你的启动性能。为了更加明确,你可以将 ShellContent打包在导航别名中,明确指示Shell如何呈现你的用户界面:
<FlyoutItem Title="Home" FlyoutIcon="home.png">
<ShellContent ...>
</FlyoutItem>
<FlyoutItem Title="Items" FlyoutIcon="store.png">
<ShellContent ...>
</FlyoutItem>
Shell支持对飞出的许多定制,包括背景的样式,覆盖内容的背景,模板化的标题,页脚,整个内容,或只是菜单项。你还可以设置飞出的宽度,保持它的开放性或完全隐藏它。这里有一些不同的设计例子:

为了显示标签,你可以用Tab 替换FlyoutItem 。要对标签集合进行分组,你可以用一个TabBar 来进一步包装它们。无论你需要怎样混合和匹配你的应用程序的页面,Shell 将为你做所有的导航。
关于定制flyout和标签的更多信息,请查看Shell flyout和Shell tabs文档。
当你需要在你的应用程序中导航到更深的页面时,你可以声明自定义路由,并通过URI导航--甚至传递querystring参数:
// declare a new route
Routing.RegisterRoute(nameof(SettingsPage), typeof(SettingsPage));
// execute a route
await Shell.Current.GoToAsync(nameof(SettingsPage));
// execute a route passing data
await Shell.Current.GoToAsync($"{nameof(SettingsPage)}?setting=appearance");
// receive querystring value
[QueryProperty(nameof(SelectedSubSection), "setting")]
public partial class TipsPage : ContentPage
{
...
public string SelectedSubSection { get;set;}
...
}
除了参数之外,你还可以通过.NET MAUI引入的新的API来传递复杂的数据对象:
// execute a route passing full object
var person = new Person { Name="James" };
await Shell.Current.GoToAsync("DetailsPage", new Dictionary<string, object>
{
{ "person", person }
});
// received the object
[QueryProperty(nameof(Person), "person")]
public partial class DetailsPage : ContentPage
{
Person person;
public Person Person
{
get => person;
set => person = value;
}
}
请查看.NET MAUI研讨会,了解更多的例子。
QueryProperty 属性将传入的querystring参数路由到提供的公共属性。在实现MVVM模式时,你也可以用视图模型这样做。
关于使用Shell导航的更多信息,请查看Shell文档。
今天就开始吧
要在Windows上获得.NET MAUI RC3,请安装或更新Visual Studio 2022 Preview到17.3 Preview 1版本。 在安装程序中,确认.NET MAUI(预览)在 "用.NET进行移动开发 "的工作负载下被选中。
要在Mac上使用.NET MAUI RC3,请遵循wiki上的命令行说明。Visual Studio 2022 for Mac中对.NET MAUI的支持将在未来的预览版中正式出货。
候选版本3的发布说明在GitHub上。关于开始使用.NET MAUI的其他信息,请参考我们的文档和迁移提示表,以了解升级项目时需要采用的变化清单。
关于Xamarin支持的提醒 Xamarin支持政策仍然有效,该政策涵盖这些产品在初始发布后的2年内。最后一次发布是在2021年11月,所以支持将持续到2023年11月。
我们需要你的反馈
按照我们的简单指南安装Visual Studio 2022 for Windows的最新预览版(17.3 Preview 1),并在今天构建你的第一个多平台应用程序。
我们很想听到你的反馈!如果你遇到任何问题,请在GitHub上提交报告,地址是dotnet/maui。