咱们在.NET 6 Preview 3中交付了.NET多平台利用UI的挪动和桌面开发的最新进展。此版本增加了Windows平台和WinUI 3,改良了根本应用程序和启动构建器,增加了原生生命周期事件,并增加了更多UI控件和布局。咱们还为辅助性能引入了一些新的语义属性。当咱们对这些进行具体探讨时,咱们邀请您与咱们一起应用dotnet new创立新利用,并分享您的反馈。

反对Windows桌面

Project Reunion 0.5已公布!当初,Windows退出了Android,iOS和macOS,成为您能够应用.NET MAUI达到的指标平台!您能够从Project Reunion装置阐明开始体验。在这个版本中,咱们创立了一个示例我的项目,您能够从Visual Studio 2019 16.10 Preview中开始摸索。

一旦有了用于Project Reunion的必要的.NET 6根底构建架构,咱们就会将Windows增加到咱们的单我的项目模板中。

入门

因为咱们仍处于预览的晚期阶段,因而装置挪动和桌面开发所需的所有依赖项的过程还是依赖于手动操作。为了帮忙您和咱们本人,乔纳森·迪克(Jonathan Dick)整顿了一个有用的工具dotnet tool,它能够评估您的零碎并尽可能多地收集所需的组件。应用这个工具须要从命令行全局装置maui-check
dotnet tool install -g Redth.Net.Maui.Check

源:https://github.com/Redth/dotn...

当初运行> maui-check并依照阐明进行操作。胜利之后,就能够创立您的第一个应用程序了:
dotnet new maui -n HelloMaui

无关装置和入门的分步阐明,也能够参考:
https://github.com/dotnet/maui/wiki/Getting-Started。

您的第一个应用程序

.NET MAUI应用Microsoft.Extensions HostBuilder启动每个应用程序。这为应用程序开发人员和库保护人员提供了统一的模式,以便疾速开发应用程序。每个平台都有不同的起始点,然而您的应用程序入口统一位于Startup.cs。这里有个简略例子:

public class Startup : IStartup {     public void Configure(IAppHostBuilder appBuilder)     {         appBuilder             .UseMauiApp();     } }

在这里,您能够执行诸如注册字体和注册Xamarin.Forms渲染器或自定义渲染器兼容性的操作。这也是您引入您的App的中央,即实现Application并(至多)负责创立一个新的Window:

public partial class App : Application {     public override IWindow CreateWindow(IActivationState activationState)     {         return new MainWindow();     } } 

为了出现您的内容,一个视图会被增加到MainWindow:

public class MainWindow : IWindow {     public MainWindow()     {         Page = new MainPage();     }     public IPage Page { get; set; }      public IMauiContext MauiContext { get; set; } } 

就是这样!您当初就领有了一个有内容的窗口。

原生生命周期事件

Preview 3进一步欠缺了启动扩大程序,引入了ConfigureLifecycleEvents以便于轻松连贯到原生平台生命周期事件上。这是一个重要的介绍,尤其是对于单我的项目体验,它能够简化许多库所需的初始化和配置。

以下是一个简略的例子,将程序关联到Android后退按钮事件并依据须要进行解决:

public class Startup : IStartup {     public void Configure(IAppHostBuilder appBuilder)     {         appBuilder             .UseMauiApp()             .ConfigureLifecycleEvents(lifecycle => {                 #if ANDROID                 lifecycle.AddAndroid(d => {                     d.OnBackPressed(activity => {                         System.Diagnostics.Debug.WriteLine("Back button pressed!");                     });                 });                 #endif             });     } } 

当初让咱们看一下其它库要如何应用这些办法来简化其平台初始化工作。Essentials(Microsoft.Maui.Essentials)库是.NET MAUI的一部分,它提供了跨平台的非UI服务,咱们能够利用此库在对立的地位中配置所有平台所需的所有内容:

public class Startup : IStartup {     public void Configure(IAppHostBuilder appBuilder)     {         appBuilder             .UseMauiApp()             .ConfigureEssentials(essentials =>             {                 essentials                     .UseVersionTracking()                     .UseMapServiceToken("YOUR-KEY-HERE");             });     } } 

在Essentials代码中,您能够看到ConfigureEssentials扩大办法是如何创立的,以及如何链接到平台生命周期事件中,从而大大简化了跨平台的原生配置。

public static IAppHostBuilder ConfigureEssentials(this IAppHostBuilder builder, Action configureDelegate = null) {     builder.ConfigureLifecycleEvents(life =>     { #if __ANDROID__         Platform.Init(MauiApplication.Current);          life.AddAndroid(android => android             .OnRequestPermissionsResult((activity, requestCode, permissions, grantResults) =>             {                 Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);             })             .OnNewIntent((activity, intent) =>             {                 Platform.OnNewIntent(intent);             })             .OnResume((activity) =>             {                 Platform.OnResume();             })); #elif __IOS__         life.AddiOS(ios => ios             .ContinueUserActivity((application, userActivity, completionHandler) =>             {                 return Platform.ContinueUserActivity(application, userActivity, completionHandler);             })             .OpenUrl((application, url, options) =>             {                 return Platform.OpenUrl(application, url, options);             })             .PerformActionForShortcutItem((application, shortcutItem, completionHandler) =>             {                 Platform.PerformActionForShortcutItem(application, shortcutItem, completionHandler);             })); #elif WINDOWS         life.AddWindows(windows => windows             .OnLaunched((application, args) =>             {                 Platform.OnLaunched(args);             })); #endif     });      if (configureDelegate != null)         builder.ConfigureServices(configureDelegate);      return builder; } 

您能够在dotnet/maui中查看残缺的类。咱们期待看到更多的库利用这种模式来简化其应用形式。

控件和布局的更新

除了从Xamarin.Forms引入的已有的可兼容的Renderers以外,咱们还将持续在.NET MAUI中减少更多控件,属性和布局。如果您应用下面的代码作为启动程序,那么您将仅能应用以后曾经实现的handlers。要查看以后已实现的内容,能够查看Handlers folder at dotnet/maui。

为了跟踪咱们接下来的工作,咱们为所有咱们曾经承受Pull request的handlers提供了一个Project Board, 大家能够查阅。

布局在Preview 3中也进行了一些更新。Grid当初反对相对大小和主动大小(与内容大小雷同)。LayoutAlignment选项当初也可用于Grid和StackLayout,因而您能够开始应用HorizontalLayoutAlignment和VerticalLayoutAlignment属性来定位视图。

辅助性能的语义属性

咱们始终在与许多客户单干,以更好地理解在实现跨多个本机平台的可拜访性方面遇到的常见艰难,以及如何使它在.NET MAUI中变得更加容易。为此而采取的措施之一是增加新的语义属性,以将跨平台属性映射到本机可拜访性属性。

<Label     Text="Welcome to .NET MAUI!"    SemanticProperties.HeadingLevel="Level1"    FontSize="32"    HorizontalOptions="CenterAndExpand" /><Label     Style="{DynamicResource Glyph}"     Text=""     SemanticProperties.Description="Heart" /><Label     Text="Click the button. You know you want to!"     FontSize="18"    x:Name="CounterLabel"    HorizontalOptions="CenterAndExpand" /><Button     Text="Click Me!"     Clicked="OnButtonClicked"    SemanticProperties.Hint="Counts the number of times you click"/>

无关更多信息,请参见this dotnet/maui issue的原始阐明和探讨。

分享您的反馈

咱们对此版本感到很兴奋,并期待您的反馈。请退出咱们的dotnet/maui,让咱们晓得您对这些改良的认识。

对.NET有任何问题,也请欢送在Microsoft Q&A 论坛发问:
https://docs.microsoft.com/en-us/answers/products/dotnet