.NET多平台应用程序用户界面(MAUI)预览版14现已在Visual Studio 2022 17.2 Preview 2中推出。 这个版本包括大量的问题解决和已完成的功能,以及一个对桌面开发者来说很受欢迎的新功能:菜单栏。虽然桌面应用程序的导航和菜单通常被设计到许多现代应用程序的内容窗口中(想想团队的左侧侧边栏或地图的顶部标签),但仍然非常需要一个传统的菜单,它位于Windows的应用程序窗口的顶部,以及macOS的标题栏中:
菜单可以用XAML或C#来表达,适用于目前在Shell 或NavigationPage 中托管的任何ContentPage 。首先在页面的MenuBarItems 集合中添加一个MenuBarItem ,然后为直接子代添加MenuFlyoutItem ,或为其他MenuFlyoutSubItem 的容器添加MenuFlyoutItem 。
<ContentPage.MenuBarItems>
<MenuBarItem Text="File">
<MenuFlyoutItem Text="Quit" Command="{Binding QuitCommand}"/>
</MenuBarItem>
<MenuBarItem Text="Locations">
<MenuFlyoutSubItem Text="Change Location">
<MenuFlyoutItem Text="Boston, MA"/>
<MenuFlyoutItem Text="Redmond, WA"/>
<MenuFlyoutItem Text="St. Louis, MO"/>
</MenuFlyoutSubItem>
<MenuFlyoutItem Text="Add a Location" Command="{Binding AddLocationCommand}"/>
</MenuBarItem>
<MenuBarItem Text="View">
<MenuFlyoutItem Text="Refresh" Command="{Binding RefreshCommand}"/>
<MenuFlyoutItem Text="Toggle Light/Dark Mode" Command="{Binding ToggleModeCommand}"/>
</MenuBarItem>
</ContentPage.MenuBarItems>
其他预览14的亮点包括:
- 设备和Essentials的调和,加上Essentials API的接口
- Shell WinUI(#4501)
- 图像缓存(#4515)
- 本地->平台重命名(#4599)
- 形状(#4472)
- 为StrokeShape使用字符串(#3256)
- WebView cookies(#4419)
- 菜单栏(#4839)
- RTL窗口(#4936)
在我们的发布说明中可以找到更多细节。
在梳理你在以前的.NET MAUI版本中的反馈时,我们注意到一个问题的主题,如 "我如何添加一个FilePicker","我如何检查我的应用程序的连接性",以及其他类似的 "基本 "应用程序任务,而不是专门的UI。
超越用户界面,访问平台API
在.NET MAUI中,有一组位于Microsoft.Maui.Essentials命名空间中的API,它们解锁了一些常见的功能,为非UI需求带来同样的效率,并快速创建漂亮的UI。Essentials最初是Xamarin生态系统中的一个库,现在被烘烤到.NET MAUI中,并被托管在同一个dotnet/maui仓库中(如果你想知道在哪里记录你的宝贵反馈)。有了它,你可以访问以下功能:
| 加速器 | 行动 | 应用程序信息 |
| 应用程序主题 | 气压计 | 电池 |
| 剪贴板 | 颜色转换器 | 指南针 |
| 连接 | 触点 | 检测摇晃 |
| 显示信息 | 设备信息 | 电子邮件 |
| 文件选择器 | 文件系统辅助工具 | 闪光灯 |
| 地理编码 | 卫星定位 | 陀螺仪 |
| 触觉反馈 | 启动器 | 磁强计 |
| 主线程 | 地图 | 媒体选择器 |
| 打开浏览器 | 方向传感器 | 許可權 |
| 电话拨号器 | 平台扩展 | 首选项 |
| 屏幕截图 | 安全存储 | 分享 |
| 短信 | 文字转语音 | 单位转换器 |
| 版本跟踪 | 震动 | 网络认证器 |
这是一个很大的问题。每个API都使用共同的模式,所以让我们通过介绍的方式集中讨论几个。
文件选取器
桌面平台可能经常有一个名为FilePicker或类似的UI控件,但不是所有平台都有。移动平台没有,但仍有可能从任何需要动作的UI元素中执行动作,如一个简单的Button :
<Button Text="Select a File" Clicked="OnClicked" />
现在我们可以使用Maui.Essentials API来启动文件拣选过程并处理回调:
async void OnClicked(object sender, EventArgs args)
{
var result = await PickAndShow(PickOptions.Default);
}
async Task<FileResult> PickAndShow(PickOptions options)
{
try
{
var result = await FilePicker.PickAsync(options);
if (result != null)
{
Text = $"File Name: {result.FileName}";
if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
{
var stream = await result.OpenReadAsync();
Image = ImageSource.FromStream(() => stream);
}
}
return result;
}
catch (Exception ex)
{
// The user canceled or something went wrong
}
return null;
}
devblogs.microsoft.com/dotnet/wp-c…
该 PickOptions方便地提供了配置你的文件选择标准的选项,如文件类型与 FilePickerFileType:
- 文件采集器文件类型.图像
- 文件类型.Jpeg
- FilePickerFileType.Pdf
- FilePickerFileType.Png
- FilePickerFileType.Videos
连接性
这是一个重要的移动功能,但对桌面也同样有用,以便处理离线和在线情况。事实上,如果你曾经试图向苹果应用商店发布一个应用程序,你可能遇到过这种常见的拒绝,因为在尝试网络调用之前没有检测连接状态。
var current = Connectivity.NetworkAccess;
if (current == NetworkAccess.Internet)
{
// able to connect, do API call
}else{
// unable to connect, alert user
}
有些服务需要对每个平台进行一些配置。在这种情况下,iOS、macOS和Windows不需要任何东西,但Android需要在 "AndroidManifest.xml "中添加一个简单的权限,你可以在.NET MAUI解决方案的Platforms/Android路径中找到:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
阅读文档以了解更多信息。
今天就开始吧
.NET MAUI预览版14与Visual Studio 17.2 Preview 2捆绑在一起,后者也于今天推出,并为.NET MAUI开发提供了最新的生产力改进。如果你正在使用Visual Studio 2022 17.1 Preview 2或更新版本,你可以升级到17.2 Preview 2。
如果你从.NET MAUI预览版10或更早的版本升级,或者一直在使用
maui-check,我们建议从一个干净的地方开始,卸载所有.NET 6预览版和Visual Studio 2022预览版。
新手可以安装这个Visual Studio 2022预览版(17.2预览版2),并确认在 "使用.NET的移动开发工作量 "下选中.NET MAUI(预览版)。
准备好了吗?打开Visual Studio 2022并创建一个新项目。搜索并选择.NET MAUI。
预览版14的发布说明在GitHub上。关于开始使用.NET MAUI的其他信息,请参考我们的文档,以及迁移提示表,以了解升级项目时应采用的变化。
要了解未来.NET 6版本的内容,请访问我们的产品路线图,要了解功能完成情况,请访问我们的状态wiki。
欢迎反馈
我们很乐意听取您的意见!请通过完成一个简短的调查,让我们了解您使用.NET MAUI的经验。
