.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.pswp.cn/news/917234.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MT Photos图库部署详解:Docker搭建+贝锐蒲公英异地组网远程访问

如今&#xff0c;私有化部署轻量级图床/图库系统&#xff0c;已经成为越来越多用户的高频需求。而MT Photos&#xff0c;正是一款非常适合在Docker环境下运行的自托管图床/图库系统。MT Photos基于Node.js与Vue构建&#xff0c;界面简洁美观&#xff0c;支持多用户权限管理、多…

解决dbeaver连接不上oceanbase数据库的问题

解决dbeaver连接不上oceanbase数据库的问题 问题&#xff1a; 使用dbeaver连接oceanbase数据库报错如下&#xff1a; ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘dat…

Kafka——请求是怎么被处理的?

引言在分布式消息系统中&#xff0c;请求处理机制是连接客户端与服务端的"神经中枢"。无论是生产者发送消息、消费者拉取数据&#xff0c;还是集群内部的元数据同步&#xff0c;都依赖于高效的请求处理流程。Apache Kafka作为高性能消息队列的代表&#xff0c;其请求…

区块链技术如何确保智能合约的安全性和可靠性?

智能合约作为区块链上自动执行的可编程协议&#xff0c;其安全性和可靠性直接决定了区块链应用的信任基础。区块链通过底层技术架构、密码学工具和机制设计的多重保障&#xff0c;构建了智能合约的安全防线。以下从技术原理、核心机制和实践保障三个维度展开分析&#xff1a;一…

2020 年 NOI 最后一题题解

问题描述2020 年 NOI 最后一题是一道结合图论、动态规划与状态压缩的综合性算法题&#xff0c;题目围绕 "疫情期间的物资配送" 展开&#xff0c;具体要求如下&#xff1a;给定一个有向图 G (V, E)&#xff0c;其中节点代表城市&#xff0c;边代表连接城市的道路。每个…

加密与安全

目录 一、URL编码&#xff1a; 二、Base64编码&#xff1a; 三、哈希算法&#xff1a; 四、Hmac算法&#xff1a; 五、对称加密算法&#xff1a; 一、URL编码&#xff1a; URL编码是浏览器发送数据给服务器时使用的编码&#xff0c;它通常附加在URL的参数部分。之所以需要…

EasyExcel 公式计算大全

EasyExcel 是基于 Apache POI 的封装&#xff0c;主要专注于简化 Excel 的读写操作&#xff0c;对于公式计算的支持相对有限。以下是 EasyExcel 中处理公式计算的全面指南&#xff1a;1. 基本公式写入1.1 写入简单公式Data public class FormulaData {ExcelProperty("数值…

2025年AI+数模竞赛培训意见征集-最后一轮

在过去几天的“AI时代下2025年数模竞赛培训课程需求调研紧急征集”我们收到了大量老师、学生的反馈。我们通过大家的实际需求&#xff0c;编写了下述2025年AI时代下最新的数学建模竞赛教学课程课程表&#xff0c;具体授课内容以及相关课件、支撑材料都将会免费发布&#xff0c;…

Qwen2 RotaryEmbedding 位置编码仅仅是第一层有吗

Qwen2 RotaryEmbedding 位置编码仅仅是第一层有吗,还是全部层都有 Qwen2 模型中的 Rotary Embedding(旋转位置编码)是应用于所有 Transformer 层 的,而非仅第一层。 1. Transformer 架构的核心逻辑 Qwen2 基于 Decoder-only Transformer 架构,而位置编码(如 Rotary Emb…

CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)

CNN卷积神经网络之LeNet和AlexNet经典网络模型&#xff08;三&#xff09; 文章目录CNN卷积神经网络之LeNet和AlexNet经典网络模型&#xff08;三&#xff09;深度学习两大经典 CNN 模型速览1. LeNet-5&#xff1a;CNN 的开山之作&#xff08;1998&#xff09;2. AlexNet&#…

江协科技STM32 12-2 BKP备份寄存器RTC实时时钟

这一节我们要讲的主要内容是RTC实时时钟&#xff0c;实时时钟本质上是一个定时器&#xff0c;但是这个定时器是专门用来产生年月日时分秒&#xff0c;这种日期和时间信息的。所以学会了STM32的RTC就可以在STM32内部拥有一个独立运行的钟表。想要记录或读取日期和时间&#xff0…

【10】大恒相机SDK C++开发 ——对相机采集的原图像数据IFrameData裁剪ROI 实时显示在pictureBox中,3种方法实现(效率不同)

文章目录1 在回调函数中实现2 独立封装调用2.1 获取图像宽、高、pBuffer、channel2.2 内存图像数据截取ROI并显示2.3 回调函数调用3 for循环嵌套 方法24 for循环嵌套 方法35 按行复制数据提高效率&#xff0c;但很耗内存6 unsafe代码 解释及注意事项 看我另一篇文章7 ConvertTo…

ubuntu22.04系统入门 linux入门(二) 简单命令 多实践以及相关文件管理命令

以下有免费的4090云主机提供ubuntu22.04系统的其他入门实践操作 地址&#xff1a;星宇科技 | GPU服务器 高性能云主机 云服务器-登录 相关兑换码星宇社区---4090算力卡免费体验、共享开发社区-CSDN博客 之所以推荐给大家使用&#xff0c;是因为上面的云主机目前是免费使用的…

分布式ID方案(标记)

一、参考文章-标记 分布式ID方案有哪些&#xff1f;雪花算法如何搞定时钟回拨和动态机器ID&#xff1f; 二、应用 1.百度 uid-generator github项目地址 原理参考 2.百度 uid-generator 扩展应用 灯官网 灯 项目代码 lamp-util 单元模块 lamp-util 单元模块子模块 lamp-…

std::map 加锁

在并发环境下使用std::map&#xff0c;必须采取同步措施。 在并发环境下对 std::map 进行不加锁的读写操作会导致严重的线程安全问题&#xff0c;主要会产生以下几种问题&#xff1a; ⚠️ 主要风险与后果数据竞争&#xff08;Data Race&#xff09; 当多个线程同时修改同一个键…

学习笔记090——Ubuntu 中 UFW 防火墙的使用

文章目录1、允许特定的端口访问2、允许特定 IP 访问某个端口3、允许某个范围的端口4、查看 UFW 状态5、重新加载 UFW6、启用 UFW7、关闭 UFW1、允许特定的端口访问 # 允许 TCP 端口&#xff08;例如 80&#xff09;&#xff1a; sudo ufw allow 80/tcp# 允许 UDP 端口&#xf…

移动端 WebView 内存泄漏与性能退化问题如何排查 实战调试方法汇总

在混合 App 应用中&#xff0c;WebView 页面常承载复杂业务逻辑与交互。随着用户使用时间增长&#xff0c;特别在切换多个页面或反复打开界面后&#xff0c;常常会出现性能下降、页面卡顿、甚至白屏崩溃等现象。这通常是因为页面存在内存泄漏、事件监听未解绑或垃圾回收阻塞导致…

JSON 对象在浏览器中顺序与后端接口返回不一致的问题

一、问题描述 后端接口返回一个字典表的JSON对象&#xff0c;页面展示排序与预期排序不一致。 在浏览器调试面板Response中看到接口原始响应字符串&#xff0c;是期望顺序&#xff1a;在Preview中看到&#xff0c; key “22” 被提到最前&#xff0c;顺序发生变化&#xff1a;页…

Spring MVC数据传递全攻略

Spring MVC数据传递一、前端到后端的数据传递1. 使用 RequestParam 传递简单参数2. 使用 PathVariable传递路径参数3. 使用RequestBody传递 JSON 数据二、后端到前端的数据传递1. 使用Model或 ModelAndView传递数据到前端2. 使用HttpServletResponse直接写回数据3.使用Response…

仓库管理系统-12-前端之头部区域Header基于嵌套路由访问个人中心

文章目录 1 个人中心 1.1 DateUtils.vue(子组件) 1.2 Home.vue(父组件) 1.3 router/index.js(嵌套路由) 1.4 index.vue(路由占位符) 2 Header.vue 2.1 页面布局 2.2 toUser方法 2.3 初始加载 2.4 Header.vue 头部区域Header中有一个个人中心下拉菜单,点击个人中心选项,通过嵌…