关于.net:官宣-MAUI-在NET-Preview-3的最新进展

9次阅读

共计 4566 个字符,预计需要花费 12 分钟才能阅读完成。

咱们在.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

正文完
 0