- .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 中的新增功能