作者: 乔克斯
查看: 2195|回复: 0
打印 上一主题 下一主题

[源码] 【MAUI】官宣MAUI在.NET Preview 3的最新进展

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2021-4-23 00:25:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
查看: 2195|回复: 0
官宣MAUI在.NET Preview 3的最新进展
由微软中国Community Support团队负责翻译并发布于微软中国MSDN公众号
我们在.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

现在运行> maui-check并按照说明进行操作。成功之后,就可以创建您的第一个应用程序了:
[C#] 纯文本查看 复制代码
dotnet new maui -n HelloMaui 

有关安装和入门的分步说明,也可以参考https://github.com/dotnet/maui/wiki/Getting-Started

您的第一个应用程序
.NET MAUI使用Microsoft.Extensions HostBuilder启动每个应用程序。这为应用程序开发人员和库维护人员提供了一致的模式,以便快速开发应用程序。每个平台都有不同的起始点,但是您的应用程序入口一致位于Startup.cs。这里有个简单例子:
[C#] 纯文本查看 复制代码
public class Startup : IStartup 
{ 
    public void Configure(IAppHostBuilder appBuilder) 
    { 
        appBuilder 
            .UseMauiApp<App>(); 
    } 
} 


在这里,您可以执行诸如注册字体和注册Xamarin.Forms渲染器或自定义渲染器兼容性的操作。这也是您引入您的App的地方,即实现Application并(至少)负责创建一个新的Window:
[C#] 纯文本查看 复制代码
public partial class App : Application 
{ 
    public override IWindow CreateWindow(IActivationState activationState) 
    { 
        return new MainWindow(); 
    } 
} 

为了呈现您的内容,一个视图会被添加到MainWindow:
[C#] 纯文本查看 复制代码
public class MainWindow : IWindow 
{ 
    public MainWindow() 
    { 
        Page = new MainPage(); 
    } 
 
    public IPage Page { get; set; } 
 
    public IMauiContext MauiContext { get; set; } 
} 

就是这样!您现在就拥有了一个有内容的窗口。

原生生命周期事件
Preview 3进一步完善了启动扩展程序,引入了ConfigureLifecycleEvents以便于轻松连接到原生平台生命周期事件上。这是一个重要的介绍,尤其是对于单项目体验,它可以简化许多库所需的初始化和配置。
以下是一个简单的例子,将程序关联到Android后退按钮事件并根据需要进行处理:
[C#] 纯文本查看 复制代码
public class Startup : IStartup 
{ 
    public void Configure(IAppHostBuilder appBuilder) 
    { 
        appBuilder 
            .UseMauiApp<App>() 
            .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服务,我们可以利用此库在统一的位置中配置所有平台所需的所有内容:
[C#] 纯文本查看 复制代码
public class Startup : IStartup 
{ 
    public void Configure(IAppHostBuilder appBuilder) 
    { 
        appBuilder 
            .UseMauiApp<App>() 
            .ConfigureEssentials(essentials => 
            { 
                essentials 
                    .UseVersionTracking() 
                    .UseMapServiceToken("YOUR-KEY-HERE"); 
            }); 
    } 
} 

在Essentials代码中,您可以看到ConfigureEssentials扩展方法是如何创建的,以及如何链接到平台生命周期事件中,从而大大简化了跨平台的原生配置。
[C#] 纯文本查看 复制代码
public static IAppHostBuilder ConfigureEssentials(this IAppHostBuilder builder, Action<HostBuilderContext, IEssentialsBuilder> 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<EssentialsBuilder>(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中变得更加容易。为此而采取的措施之一是添加新的语义属性,以将跨平台属性映射到本机可访问性属性。
[C#] 纯文本查看 复制代码
<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,让我们知道您对这些改进的看法。


下载源码:
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播
回复 论坛版权

使用道具 举报

您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-12-24 00:28, Processed in 0.581613 second(s), 34 queries , Gzip On.

快速回复 返回顶部 返回列表