.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
英文地址,請注明出處:http://en.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中有一個個人中心下拉菜單,點擊個人中心選項,通過嵌…