当前位置: 首页 > news >正文

.NET 10 中的新增功能系列文章3—— .NET MAUI 中的新增功能

  • .NET 10 预览版 6 中的 .NET MAUI
  • .NET 10 预览版 5 中的.NET MAUI
  • .NET 10 预览版 4 中的 .NET MAUI
  • .NET 10 预览版 3 中的 .NET MAUI
  • .NET 10 预览版 2 中的 .NET MAUI
  • .NET 10 预览版 1 中的 .NET MAUI

一、MediaPicker 增强功能(预览版6)

.NET 10 预览版6 对 MediaPicker 进行了显著增强,新增了支持多文件选择和图像压缩的功能。开发者现在可以通过简单的 API 调用实现这些功能:

var result = await MediaPicker.PickMultipleAsync(new MediaPickerOptions
{MaximumWidth = 1024,MaximumHeight = 768
});

这个改进使得处理媒体文件变得更加高效,特别是对于需要处理多张图片或控制图像尺寸的应用场景。

二、XAML 命名空间简化(预览版5)

.NET 10 预览版5 引入了一套全新的 XAML 命名空间处理机制,显著简化了 XAML 文件的头部声明。主要改进包括:

  1. 项目范围的"全局"命名空间http://schemas.microsoft.com/dotnet/maui/global 可以聚合多个 xmlns
  2. 隐式默认命名空间(选择加入):编译器自动注入默认命名空间

对比示例:

<!-- .NET 8 style -->
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:models="clr-namespace:MyApp.Models"xmlns:controls="clr-namespace:MyApp.Controls"x:Class="MyApp.MainPage"><controls:TagView x:DataType="models:Tag" />
</ContentPage><!-- .NET 10 简化版 -->
<ContentPage x:Class="MyApp.MainPage"><TagView x:DataType="Tag" />
</ContentPage>

变化:

  • 无需声明 xmlns:modelsxmlns:controls 因为它们在 GlobalXmlns.cs 文件中全局声明
  • 不需要前缀 TagViewTag
<!-- .NET 10 Preview 5 plus opt-in -->
<ContentPage x:Class="MyApp.MainPage"><TagView x:DataType="Tag" />
</ContentPage>

要启用这一功能,开发者需要在项目中添加 GlobalXmlns.cs 文件并配置相关属性。

三、Web 请求拦截功能(预览版5和6)

.NET 10 为 BlazorWebView 和 HybridWebView 新增了 Web 请求拦截能力,为开发者提供了更大的灵活性:

webView.WebResourceRequested += (s, e) =>
{if (e.Uri.ToString().Contains("api/secure")){e.Handled = true;e.SetResponse(200, "OK", "application/json", GetCustomStream());}
};

此功能支持多种场景,包括修改请求头、重定向请求或提供本地响应等。

四、.NET Aspire 集成

.NET 10 为 .NET MAUI 新增了与 .NET Aspire 的深度集成模板,简化了遥测和服务发现的配置:

builder.AddServiceDefaults();

该方法自动完成:

  • OpenTelemetry 指标和追踪配置
  • 服务发现功能添加
  • HttpClient 与服务发现的集成配置

这为构建现代云原生应用提供了更便捷的路径。

五、动画 API 改进

.NET 10 对动画 API 进行了现代化改造,将原有的同步方法替换为异步版本:

旧方法新方法
FadeToFadeToAsync
RotateToRotateToAsync
ScaleToScaleToAsync

这种改变不仅更符合现代异步编程模式,还能避免潜在的 UI 线程阻塞问题。

详细信息:基础动画。

六、控件增强和弃用

CollectionView 和 CarouselView

.NET 9 中的 .NET MAUI 在 iOS 和 Mac Catalyst 上包含了两个可选的处理程序,为 CollectionView 和 CarouselView带来了性能和稳定性改进。 在 .NET 10 中,这些是 CollectionView 和 CarouselView的默认处理程序。

编辑和输入 (Android)

在安卓平台上,Editor 和 Entry 视图将它们的原生视图从 AppCompatEditText 更改为 MauiAppCompatEditText,这增加了对 SelectionChanged 事件的支持。

HybridWebView

HybridWebView 获得一个 InvokeJavaScriptAsync 重载,该重载调用指定的 JavaScript 方法,但不包括返回类型的任何信息。 有关详细信息,请参阅 调用不返回值的 JavaScript 方法。

默认情况下,由您的JavaScript代码抛出的任何异常都会发送到.NET,然后在.NET中重新抛出为.NET异常。

列表视图

ListView 已被弃用,和 EntryCell、ImageCell、SwitchCell、TextCell、以及 ViewCell 一样。 相反,应使用 CollectionView。

备注

Cell 尚未弃用,因为它目前用于源代码生成。 然而,它应该被视为已弃用。

搜索栏

SearchBar 获得了一个 SearchIconColor 可绑定属性,用于设置搜索图标的颜色:

<SearchBar Placeholder="Search items..."SearchIconColor="Blue" />

SearchBar 还获得一个可绑定的 ReturnType 属性,类型为 ReturnType,用于指定返回按钮的外观。 此属性的默认值为 Search

有关详细信息,请参阅 SearchBar。

开关

Switch 拥有一个 OffColor 可绑定属性,用于设置开关在关闭状态时的颜色。

<Switch OffColor="Red"OnColor="Green" />

有关详细信息,请参阅 开关。

表格视图

TableView 已弃用。 相反,应使用 CollectionView。

Android上的WebView

当视频托管在 Android 的WebView中时,现在可以通过在allowfullscreen中包含iframe来全屏播放。

七、平台特定功能增强

  1. iOS/Mac Catalyst 模态页面:现在可以显示为弹出式页面

    适用于 .NET 10 的 .NET MAUI 添加了一个特定于平台的功能,可以在 iOS 和 Mac Catalyst 上将模态页面显示为弹出式页面。 通过将Page.ModalPopoverSourceView可绑定属性设置为定义模态来源的View,将Page.ModalPopoverRect可绑定属性设置为定义弹出框将从其发起的视图内矩形的Rectangle,并将Page.ModalPresentationStyle可绑定属性设置为Popover,来使用它。

using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;public partial class PopoverPage : ContentPage
{public PopoverPage(View modal, Rectangle rectangle){InitializeComponent();On<iOS>().SetModalPopoverView(modal);On<iOS>().SetModalPopoverRect(rectangle);On<iOS>().SetModalPresentationStyle(UIModalPresentationStyle.Popover);}
}

使用 Navigation.PushModalAsync 方法导航到模式页

Page modalPage = new PopoverPage(originButton, Rectangle.Empty);
await Navigation.PushModalAsync(modalPage);
  1. 地理位置:新增 IsEnabled 属性检查位置服务状态

  2. 文本转语音:SpeechOptions 新增 Rate 属性控制语速

  3. Web 认证:AuthenticateAsync 支持 CancellationToken

这些平台特定的增强使得应用能够更好地利用各平台的原生能力^参考内容:“平台功能”^。

八、Android 开发改进

.NET 10 为 Android 开发带来多项重要改进:

  1. API 36 和 JDK 21 支持:默认使用 Android 16 (API 36)
  2. dotnet run 支持:简化调试流程
// Run on the only attached Android physical device
dotnet run -p:AdbTarget=-d// Run on the only running Android emulator
dotnet run -p:AdbTarget=-e// Run on the specified Android physical device or emulator
dotnet run -p:AdbTarget="-s emulator-5554"
  1. 编组方法默认启用

    在 .NET 9 中,引入了一种新的方式来创建 Java 代码调用 C# 代码所需的封送方法,提高了启动性能。 但是,在 .NET 9 中,它们默认处于关闭状态。

    在 .NET 10 中,默认启用它们。 这些封送方法的问题通常表现为启动时挂起。 如果您在 .NET 10 预览版中遇到启动时的卡顿问题,而在 .NET 9 上没有,请尝试在项目文件中将 $(AndroidEnableMarshalMethods) MSBuild 属性设置为 false 来禁用封送方法。

<PropertyGroup><AndroidEnableMarshalMethods>false</AndroidEnableMarshalMethods>
<PropertyGroup>
  1. 构建优化:使用 System.IO.Compression 创建 APK,缩短构建时间

这些改进显著提升了 Android 开发的体验和效率。

九、iOS 开发改进

iOS 开发在 .NET 10 中也获得多项增强:

  1. 修剪器增强:在更多配置中启用,默认显示警告
  2. 原始资源处理:优化资源嵌入机制
  3. Windows 绑定构建:不再需要远程 Mac
  4. NSUrlSessionHandler 改进:更灵活的 TLS 配置
<PropertyGroup><SuppressTrimAnalysisWarnings>true</SuppressTrimAnalysisWarnings><BundleOriginalResources>false</BundleOriginalResources>
</PropertyGroup>

系列文章

.NET 10 中的新增功能系列文章1——运行时中的新增功能

.NET 10 中的新增功能系列文章2——ASP.NET Core 中的新增功能

http://www.xdnf.cn/news/1217773.html

相关文章:

  • 《Java 程序设计》第 18 章 - Java 网络编程
  • C++面试5题--6day
  • LLC电源原边MOS管DS增加RC吸收对ZVS的影响分析
  • 开发避坑短篇(11):Oracle DATE(7)到MySQL时间类型精度冲突解决方案
  • PHP 5.5 Action Management with Parameters (English Version)
  • 专业鼠标点击器,自定义间隔次数
  • 网站技术攻坚与Bug围剿手记
  • Spring Cloud『学习笔记』
  • [硬件电路-111]:滤波的分类:模拟滤波与数字滤波; 无源滤波与有源滤波;低通、带通、带阻、高通滤波;时域滤波与频域滤波;低价滤波与高阶滤波。
  • 《Java 程序设计》第 17 章 - 并发编程基础
  • 澳交所技术重构窗口开启,中资科技企业如何破局?——从ASX清算系统转型看跨境金融基础设施的赋能路径
  • 数据结构与算法:队列的表示和操作的实现
  • HighgoDB查询慢SQL和阻塞SQL
  • 模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)
  • 打车小程序 app 系统架构分析
  • 【12】大恒相机SDK C#开发 ——多相机开发,枚举所有相机,并按配置文件中的相机顺序 将所有相机加入设备列表,以便于对每个指定的相机操作
  • 深入理解 Slab / Buddy 分配器与 MMU 映射机制
  • 【源力觉醒 创作者计划】对比与实践:基于文心大模型 4.5 的 Ollama+CherryStudio 知识库搭建教程
  • mysql结构对比工具
  • 类与对象(上),咕咕咕
  • ECMAScript2024(ES15)新特性
  • SpringAI 1.0.0发布:打造企业级智能聊天应用
  • AI 安监系统:为工业园安全保驾护航
  • 【Debian】4-‌1 Gitea简介以及与其他git方案差异
  • Windows 10 WSLUbuntu 22.04 安装并迁移到 F 盘
  • 2018 年 NOI 最后一题题解
  • 【预判一手面试问题:排序】
  • 2023 年 NOI 最后一题题解
  • n8n为什么建议在数组的每个item中添加json键?
  • Docker部署Nacos