.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 文件的头部声明。主要改进包括:
- 项目范围的"全局"命名空间:
http://schemas.microsoft.com/dotnet/maui/global
可以聚合多个 xmlns - 隐式默认命名空间(选择加入):编译器自动注入默认命名空间
对比示例:
<!-- .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:models
或xmlns:controls
因为它们在GlobalXmlns.cs
文件中全局声明 - 不需要前缀
TagView
或Tag
<!-- .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 进行了现代化改造,将原有的同步方法替换为异步版本:
旧方法 | 新方法 |
---|---|
FadeTo | FadeToAsync |
RotateTo | RotateToAsync |
ScaleTo | ScaleToAsync |
这种改变不仅更符合现代异步编程模式,还能避免潜在的 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
来全屏播放。
七、平台特定功能增强
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);
地理位置:新增 IsEnabled 属性检查位置服务状态
文本转语音:SpeechOptions 新增 Rate 属性控制语速
Web 认证:AuthenticateAsync 支持 CancellationToken
这些平台特定的增强使得应用能够更好地利用各平台的原生能力^参考内容:"平台功能"^。
八、Android 开发改进
.NET 10 为 Android 开发带来多项重要改进:
- API 36 和 JDK 21 支持:默认使用 Android 16 (API 36)
- 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"
编组方法默认启用:
在 .NET 9 中,引入了一种新的方式来创建 Java 代码调用 C# 代码所需的封送方法,提高了启动性能。 但是,在 .NET 9 中,它们默认处于关闭状态。
在 .NET 10 中,默认启用它们。 这些封送方法的问题通常表现为启动时挂起。 如果您在 .NET 10 预览版中遇到启动时的卡顿问题,而在 .NET 9 上没有,请尝试在项目文件中将
$(AndroidEnableMarshalMethods)
MSBuild 属性设置为false
来禁用封送方法。
<PropertyGroup>
<AndroidEnableMarshalMethods>false</AndroidEnableMarshalMethods>
<PropertyGroup>
- 构建优化:使用 System.IO.Compression 创建 APK,缩短构建时间
这些改进显著提升了 Android 开发的体验和效率。
九、iOS 开发改进
iOS 开发在 .NET 10 中也获得多项增强:
- 修剪器增强:在更多配置中启用,默认显示警告
- 原始资源处理:优化资源嵌入机制
- Windows 绑定构建:不再需要远程 Mac
- NSUrlSessionHandler 改进:更灵活的 TLS 配置
<PropertyGroup>
<SuppressTrimAnalysisWarnings>true</SuppressTrimAnalysisWarnings>
<BundleOriginalResources>false</BundleOriginalResources>
</PropertyGroup>
系列文章
.NET 10 中的新增功能系列文章1——运行时中的新增功能
.NET 10 中的新增功能系列文章2——ASP.NET Core 中的新增功能
.NET 10 中的新增功能系列文章3—— .NET MAUI 中的新增功能的更多相关文章
- 《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载
Selenium是一种非常流行的浏览器和网页自动化技术,开发人员可以使用C#.Java.Python等语言来操作Chrome.Firefox等浏览器. VBA语言可以直接操作访问Microsoft I ...
- 推酷文章中编写js组件系列文章整理
一步一步实现JS拖拽插件 http://www.tuicool.com/articles/RBbmMjY JS组件系列——基于Bootstrap Ace模板的菜单和Tab页效果分享 http://ww ...
- 微信JS分享功能--微信JS系列文章(二)
概述 在上一篇文章微信JS初始化-- 微信JS系列文章(一)中已经介绍了微信JS初始化的相关工作,接下来本文继续就微信JS的分享功能进行描述,供大家参考. 代码 $(document).ready(f ...
- 微信JS图片上传与下载功能--微信JS系列文章(三)
概述 在前面的文章微信JS初始化-- 微信JS系列文章(一)中已经介绍了微信JS初始化的相关工作,接下来本文继续就微信JS的图片上传功能进行描述,供大家参考. 图片上传 $(function(){ v ...
- Grafana 系列文章(八):Grafana Explore 中的 Inspector
️URL: https://grafana.com/docs/grafana/latest/explore/explore-inspector/ Description: Explore 中的检查器 ...
- 无废话C#设计模式系列文章
不错的系列文章 原文:http://www.cnblogs.com/lovecherry/archive/2007/10/17/927728.html 本系列文章从公司内部的知识分享修改而来,有错误或 ...
- Entity Framework系列文章导航
转自:http://www.cnblogs.com/xray2005/archive/2011/10/11/2206746.html Entity Framework4.0系列文章 需要说明的是,以下 ...
- 《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章
<如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章 问题: VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何 ...
- 在 Maui 中自绘组件1:绘制
在 Maui 中自绘组件 系列文章已完结,共六篇,此为第一篇. 在 Maui 中自绘组件1:绘制 在 Maui 中自绘组件2:可绑定属性 在 Maui 中自绘组件3:事件与命令 在 Maui 中自绘组 ...
- 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...
随机推荐
- MFC窗口闪烁问题
本文引自:<VC窗口闪烁问题的解决> 概述 一般的windows复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小时候出现闪烁. 闪烁产生的原因 原因一: 如 ...
- C++ 迭代器(STL迭代器)iterator详解
要访问顺序容器和关联容器中的元素,需要通过"迭代器(iterator)"进行,迭代器是一个变量,相当于容器和操作容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可 ...
- manim边做边学--隐函数图像
在数学可视化中,显函数$ y=f(x) \(相对容易处理,但**隐函数**\) F(x,y)=0 $的绘制则更具挑战性. Manim库中的ImplicitFunction类专门用于解决这个问题,它能够 ...
- 构建基于Serverless架构的向量检索MCP Server
构建基于Serverless架构的向量检索MCP Server 随着LLM与Agent的快速发展,向量检索成为构建高效语义搜索和智能推荐系统的关键技术之一.OpenSearch Service 作为一 ...
- 如何在FastAPI中玩转GitHub认证,让用户一键登录?
title: 如何在FastAPI中玩转GitHub认证,让用户一键登录? date: 2025/06/22 09:11:47 updated: 2025/06/22 09:11:47 author: ...
- 快速创建SQL Server 链接服务器
SQL Server链接服务器简介 SQL Server提供链接到另一个服务器的选项.这通常被用来连接到其他SQL Server数据库,但它也可以被用来连接到一个Microsoft Access数据库 ...
- Web前端入门第 72 问:JavaScript DOM 内容操作常用方法和 XSS 注入攻击
当项目的安全团队找上门告诉您,您开发的项目存在 XSS 安全漏洞,作为一个开发人员,就问您慌不慌?? HTML 内容写入的时候,如果稍不注意就会触发隐藏 BOSS 漏洞 XSS. XSS 漏洞原理就是 ...
- 尚硅谷SpringMVC学习笔记第10-13节(文件上传和下载、拦截器、异常处理器、注解配置SpringMVC)
转载于https://blog.csdn.net/weixin_57341232/article/details/126423746
- SQL Server高级进阶之索引碎片维护
SELECT OBJECT_SCHEMA_NAME(B.OBJECT_ID) 架构,OBJECT_NAME(B.OBJECT_ID) 表名,B.NAME 索引名,ROUND(A.AVG_FRAGMEN ...
- 使用openOffice将office文件转成pdf
下载安装openoffice,下载地址:http://www.openoffice.org/download/ 我安装的目录: 输入cmd回车 在命令窗口输入 soffice -headless -a ...