官宣 MAUI 在.NET Preview 3的最新进展
我们在.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/dotnet-maui-check
现在运行> 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
官宣 MAUI 在.NET Preview 3的最新进展的更多相关文章
- 【官网】2019.5.19 CentOS8.0 最新进展
Contents CentOS 8 Rough Status Page General Steps Architectures Main architectures AltArch Current T ...
- 官宣 .NET MAUI 预览版 6
最近,我们发布了.NET 多平台应用程序UI (MAUI)的最新进展. 在此版本中,我们全力支持Visual Studio 2022 预览版2.这也标志着我们首次将.NET MAUI 作为工作负载安装 ...
- 官宣 ! 52abp_Pro版本低调上线
上线了 官宣!官宣!官宣! 重要的事情说三次. 是的,你没有看错 https://www.52abp.com/ 的官方企业模板:52abp-pro已经正式上线. 至此52abp.com的官方网站就算告 ...
- TPCx-BB官宣最新世界纪录,阿里巴巴计算力持续突破
2019年9月17日,TPC官宣Alibaba Cloud MaxCompute认证结果.同月26日,杭州云栖大会阿里巴巴宣布了这一成绩,飞天大数据平台计算引擎MaxCompute成为全球首个TPCx ...
- 官宣 | Apache Flink 1.12.0 正式发布,流批一体真正统一运行!
官宣 | Apache Flink 1.12.0 正式发布,流批一体真正统一运行! 原创 Apache 博客 [Flink 中文社区](javascript:void(0) 翻译 | 付典 Revie ...
- [刘阳Java]_Web前端入门级练习_迅雷官宣网设计
也有一段时间没有写一些技术专题文章,今天给大家来几篇Web前端入门级练习的文章.主讲<迅雷官宣网>的设计,相信大家平时也用过迅雷这个下载工具,所以分享的这篇技术大家在一定程序会感兴趣. 先 ...
- Spring官宣网传大漏洞,并提供解决方案
Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹.所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷惑的营销文.以及 ...
- 官宣 .NET 7 Preview 2
今天,我们很高兴发布 .NET 7 预览版 2..NET 7 的第二个预览版包括对 RegEx 源生成器的增强.将 NativeAOT 从实验状态转移到运行时的进展,以及对"dotnet n ...
- [翻译] .NET 官宣跨平台 UI 框架 MAUI
MAUI Build 2020 大会上,微软终于正式公布 .NET 上的跨平台框架,正式版将在 .NET 6 和大家见面. MAUI 是日益流行的 Xamarin.Forms 的进化,Xamarin. ...
随机推荐
- 博客数据库要连接Elasticsearch,使用MySQL还是MongoDB更合理
若进行博客等文本类数据的读写以及专业搜索引擎的连接的解决方案对比,可以肯定的下结论:MongoDB的解决方案中要远远好于MySQL的解决方案. 一.从开发工序角度 MySQL的文章读写方式 方式一:文 ...
- keras环境搭建
操作系统 : CentOS7.5.1804_x64 Python 版本 : 3.6.8 keras + tensorflow 环境搭建,使用cpu,安装命令如下: virtualenv -p /usr ...
- for、while的循环套用和函数的递归
一.集成开发工具Eclipse 1.1 下载 官网下载 https://www.eclipse.org/downloads/download.php?file=/technology/epp/down ...
- 500GJava/Hadoop/Spark/机器学习...视频教程免费分享 百度云持续更新
参加工作这么长时间了,工作中遇到了不少技能都是看视频教程学习的,相比较看书而言看视频确实比较容易理解.分享一下自己看过的和收集的视频教程. 资源包括: 大数据方面的Hadoop(云帆,小象学院,八斗学 ...
- POJ-2195(最小费用最大流+MCMF算法)
Going Home POJ-2195 这题使用的是最小费用流的模板. 建模的时候我的方法出现错误,导致出现WA,根据网上的建图方法没错. 这里的建图方法是每次到相邻点的最大容量为INF,而花费为1, ...
- docker swarm模式跨主机连接
一.前言 当我们开发好微服务之后,考虑到灵活快速持续部署的需要,通常会考虑将其Docker镜像化并在Docker环境下运行.由于微服务个数通常会较多,把所有微服务部署在一台docker主机上是不现实的 ...
- linux_MYSQL 数据库自动备份并压缩和删除历史备份
1. 创建shell脚本 #! /bin/bash# MySQL用户user="root"# MySQL密码userPWD="123456789"# 需要定时备 ...
- 【Azure 微服务】PowerShell中,用Connect-ServiceFabricCluster命令无法连接到sf-test.chinaeast2.cloudapp.chinacloudapi.cn:19000 问题分析
问题描述 Azure Service Fabric提供了PowerShell的指令来进行创建,管理资源,如Get-ServiceFabricClusterHealth 获取当前集群的健康状态,但这些命 ...
- JAVA-常用集合类型转换例子
package com.net.xinfang.reflect; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
- 一个通用驱动Makefile-V2-支持编译多目录
目录 前言 1. 特点 2. 分析 2.1 简要原理 2.2 具体分析 3. 源码 前言 该 Makefile 已经通过基于内核 Linux5.4 版本验证通过. 因为编写这通用驱动 Makefile ...