.NET MAUI – 一個程式碼庫,多個平台

.NET MAUI – 一個程式碼庫,多個平台

.NET 開發人員擁有了針對 Android、iOS、macOS 和 Windows 的一流跨平台 UI 堆疊

最後更新 2022/5/26 下午9:19
gui.h
預計閱讀 14 分鐘
分類
MAUI
標籤
.NET C# MAUI

歡迎使用 .NET 多平台應用程式 UI。此版本標誌著我們統一 .NET 平台的多年旅程中的新里程碑。現在,您和超過 500 萬名 .NET 開發人員擁有了針對 Android、iOS、macOS 和 Windows 的一流跨平台 UI 堆疊,以補充 .NET 工具鏈 (SDK) 和基礎類別庫 (BCL)。您可以使用 .NET 建置任何內容。

加入我們的 Microsoft Build 2022,我們將為您介紹使用 .NET 和 Visual Studio 為任何裝置建置原生應用程式的所有更新。» 了解更多

這只是我們建立讓 .NET 開發人員滿意的桌面和行動應用體驗之旅的開始。對於下一階段,現在已經為更廣泛的 .NET 生態系統奠定了基礎,將 .NET Framework 和舊專案系統中的外掛程式、程式庫和服務引入 .NET 6 與 SDK 樣式的專案。目前可用的產品包括:

下面是一些連結截圖,連結較多直接截圖,有興趣點選原文查看:

有關將程式庫移轉至 .NET 6 的協助,請查看最近的客座部落格文章,其中詳細介紹了來自 Michael Rumpler (MR.Gestures) 和 Luis Matos (Plugin.ValidationRules) 的經驗。

在 18 個月的目前發行排程下,.NET MAUI 工作負載完全受支援,並將以與 .NET 相同的月頻率提供服務。我們對 .NET MAUI 的持續關注點仍然是品質,根據您的意見回饋解決已知問題並確定問題的優先順序。這還包括我們提供的工作負載,用於建置專門針對 Android、Android Wear、CarPlay、iOS、macOS 和 tvOS 的應用程式,直接使用 .NET 的原生工具套件,以及支援程式庫 AndroidX、Facebook、Firebase、Google Play Services 和 SkiaSharp。

藉助 .NET MAUI,您可以實現不妥協的使用者體驗,同時分享比以往更多的程式碼。.NET MAUI 透過每個平台提供的頂級應用工具套件、現代化的開發人員生產力,以及我們迄今為止最快的行動平台,使用原生 UI。

原生 UI,不妥協

.NET MAUI 的主要目標是使您能夠提供由每個平台 (Android、iOS、macOS 和 Windows) 專門設計的最佳應用體驗,同時使您能夠透過豐富的樣式和圖形打造一致的品牌體驗。開箱即用,每個平台的外觀和行為都符合其應有的方式,而無需任何其他小工具或樣式來模仿。例如,Windows 上的 .NET MAUI 由 WinUI 3 提供支援,WinUI 3 是 Windows 應用程式 SDK 附帶的首屈一指的原生 UI 元件。

使用 C# 和 XAML 從包含 40 多個控制項、版面配置和頁面的豐富工具套件產生應用程式。在行動控制項的 Xamarin 肩膀上,.NET MAUI 新增了對多視窗桌面應用程式、功能表列和新的動畫功能、框線、圓角、陰影、圖形等的支援。哦,還有我將在下面重點介紹的新內容:BlazorWebView。

閱讀 .NET MAUI 文件中有關控制項:頁面、版面配置和檢視的詳細資訊

無障礙優先

使用原生 UI 的一個主要優點是繼承的無障礙功能支援,我們可以在語意服務的基礎上建置這些支援,以便比以往更輕鬆地建立高度無障礙的應用程式。我們與客戶密切合作,重新設計了我們的無障礙開發方式。透過這些對話,我們設計了 .NET MAUI 語意服務來控制:

  • 描述、提示和標題層級等屬性
  • 焦點
  • 螢幕閱讀器
  • 自動化屬性

閱讀 .NET MAUI 文件中有關無障礙功能語意服務的詳細資訊

超越使用者介面

.NET MAUI 提供了簡單的 API 來存取每個平台的服務和功能,例如加速度計、應用程式動作、檔案系統、通知等。在此範例中,我們設定了 app actions,用於向每個平台上的應用程式圖示新增功能表選項:

AppActions.SetAsync(
    new AppAction("current_info", "Check Current Weather", icon: "current_info"),
    new AppAction("add_location", "Add a Location", icon: "add_location")
);

閱讀 .NET MAUI 文件中有關存取平台服務和功能的詳細資訊

輕鬆自訂

無論您是在擴充 .NET MAUI 控制項的功能,還是在建立新的平台功能,.NET MAUI 都是針對可擴充性而設計的,因此您絕不會碰壁。以控制項為例,控制項是在一個平台上以不同方式呈現的控制項的規範範例。Android 會在文字欄位下方繪製一條底線,開發人員通常希望刪除該底線。使用 .NET MAUI,只需幾行程式碼即可自訂整個專案中的一切:Entry

#if ANDROID
Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) =>
{
    h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform());
});
#endif

以下是最近由 Cayas Software 建立新的 Map 平台控制項的一個很好的例子。這篇部落格文章示範如何為控制項建立處理常式,為每個平台實作,然後透過在 .NET MAUI 中註冊控制項來使其可用。

.ConfigureMauiHandlers(handlers =>
{
    handlers.AddHandler(typeof(MapHandlerDemo.Maps.Map),typeof(MapHandler));
})

在 .NET MAUI 文件中閱讀有關使用處理常式自訂控制項的詳細資訊

現代化的開發生產力

作為一項可以建置任何東西的技術,我們希望 .NET 還能夠使用通用語言功能、模式、實務以及工具來提高您的工作效率。

.NET MAUI 使用 .NET 6 中引入的新 C# 10 功能,包括全域 using 陳述式和檔案範圍命名空間,非常適合減少檔案中的混亂與髒亂。.NET MAUI 將多目標設定的能力提升到一個新的水平,我們只需要專注於「單一專案」。

在新的 .NET MAUI 專案中,平台位於一個子資料夾中,將重點放在您花費大部分精力的應用程式上。在專案的「資源」資料夾中,您只需一個位置即可管理應用程式的字型影像應用程式圖示初始畫面、原始資源和樣式。.NET MAUI 將針對每個平台的獨特需求進行最佳化。

多專案 vs 單一專案:仍然支援為每個平台使用個別的專案來建置您的解決方案,因此您可以選擇單一專案方法何時適合您的應用程式。

.NET MAUI 在 ASP.NET 和 Blazor 應用程式中使用 Microsoft.Extensions 程式庫中流行的「建構器模式」作為初始化與設定應用程式的統一方式。在這裡,您可以向 .NET MAUI 提供字型、利用平台特定的生命週期事件、設定相依性、啟用特定功能、啟用供應商控制工具套件等。

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureServices()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("Segoe-Ui-Bold.ttf", "SegoeUiBold");
                fonts.AddFont("Segoe-Ui-Regular.ttf", "SegoeUiRegular");
                fonts.AddFont("Segoe-Ui-Semibold.ttf", "SegoeUiSemibold");
                fonts.AddFont("Segoe-Ui-Semilight.ttf", "SegoeUiSemilight");
            });

        return builder.Build();
    }
}
public static class ServicesExtensions
{
    public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder)
    {
        builder.Services.AddMauiBlazorWebView();
        builder.Services.AddSingleton<SubscriptionsService>();
        builder.Services.AddSingleton<ShowsService>();
        builder.Services.AddSingleton<ListenLaterService>();
#if WINDOWS
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Windows.NativeAudioService>();
#elif ANDROID
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Android.NativeAudioService>();
#elif MACCATALYST
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.MacCatalyst.NativeAudioService>();
        builder.Services.TryAddSingleton< Platforms.MacCatalyst.ConnectivityService>();
#elif IOS
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.iOS.NativeAudioService>();
#endif

        builder.Services.TryAddTransient<WifiOptionsService>();
        builder.Services.TryAddSingleton<PlayerService>();

        builder.Services.AddScoped<ThemeInterop>();
        builder.Services.AddScoped<ClipboardInterop>();
        builder.Services.AddScoped<ListenTogetherHubClient>(_ =>
            new ListenTogetherHubClient(Config.ListenTogetherUrl));


        return builder;
    }
}

閱讀更多有關 .NET MAUI 的文件:app startup with MauiProgramsingle project

將 Blazor 引入桌面和行動裝置

.NET MAUI 也非常適合希望透過原生用戶端應用程式參與其中的 Web 開發人員。.NET MAUI 與 Blazor 整合,因此您可以直接在原生行動和桌面應用程式中重複使用現有的 Blazor Web UI 元件。藉助 .NET MAUI 和 Blazor,您可以重複使用 Web 開發技能來建置跨平台原生用戶端應用程式,並建置 UI 一致的行動、桌面和 Web 應用程式。

.NET MAUI 在裝置上以原生方式執行 Blazor 元件(無需 WebAssembly),並將其呈現到內嵌的 Web 檢視控制項。由於 Blazor 元件在 .NET 處理序中編譯和執行,因此它們不限於 Web 平台,還可以利用任何原生平台功能,例如通知、藍牙、地理位置和感應器、檔案系統等。您甚至可以將原生 UI 控制項新增到 Blazor Web UI 旁邊。這是一個全新的混合應用程式:Blazor Hybrid!

開始使用 .NET MAUI 和 Blazor 非常簡單:只需使用隨附的 .NET MAUI Blazor App 專案範本即可。

此範本已全部設定完成,因此您可以使用 HTML、CSS 和 C# 開始建置 .NET MAUI Blazor 應用程式。適用於 .NET MAUI 的 Blazor Hybrid 教學課程將引導您完成建置和執行第一個 .NET MAUI Blazor 應用程式的過程。

或者,將 BlazorWebView 控制項新增到現有的 .NET MAUI 應用程式中,無論您想要在何處開始使用 Blazor 元件:

<BlazorWebView HostPage="wwwroot/index.html">
    <BlazorWebView.RootComponents>
        <RootComponent Selector="#app" ComponentType="{x:Type my:Counter}" />
    </BlazorWebView.RootComponents>
</BlazorWebView>

Blazor Hybrid 支援現在還可用於 WPF 和 Windows Forms,因此您可以開始對現有桌面應用程式進行現代化改造,以便在 Web 上執行或使用 .NET MAUI 跨平台執行。WPF 和 WinForms 的 BlazorWebView 控制項在 NuGet 上可用。查看適用於 WPFWinForms 的 Blazor Hybrid 教學課程,瞭解如何開始使用。

若要深入瞭解 Blazor Hybrid 對 .NET MAUI、WPF 和 Windows Forms 的支援,請查看 Blazor Hybrid 文件

針對速度進行了最佳化

.NET MAUI 專為提高效能而設計。您已經告訴我們,儘快啟動您的應用程式是多麼重要,尤其是在 Android 上。.NET MAUI 中的 UI 控制項在本機平台控制項上實現了精簡的解耦處理常式對應器模式。這減少了 UI 呈現中的層數,並簡化了控制項自訂。

.NET MAUI 中的版面配置已設計為使用一致的管理器模式,該模式可最佳化度量值並排列迴圈,以便更快地呈現和更新 UI。除了 StackLayout 之外,我們還展示了針對特定場景進行預先最佳化的版面配置,例如 HorizontalStackLayoutVerticalStackLayout

從此旅程的一開始,我們就設定了一個目標,即在過渡到 .NET 6 時提高啟動效能並保持或減小應用程式大小。在正式發行時,我們的 .NET MAUI 提高了 34.9%,Android 版 .NET 提高了 39.4%。這些收益也延伸到複雜的應用程式;.NET Podcast 範例應用程式開始時啟動速度為 1299 毫秒,GA 的執行速度為 814.2 毫秒,自預覽版 13 以來提高了 37.3%。

預設情況下,這些設定處於啟用狀態,以便為發行版本提供這些最佳化。

請繼續關注一篇關於我們為實現這些結果所做的工作的深入部落格文章。

從今天開始

若要開始在 Windows 上使用 .NET MAUI,請安裝 Visual Studio 2022 Preview 或更新到版本 17.3 Preview 1.1。在安裝程式中,選擇工作負載「.NET 多平台應用程式 UI 開發」。

若要在 Mac 上使用 .NET MAUI,請安裝新的 Visual Studio 2022 Preview for Mac (17.3 Preview 1)。

Visual Studio 2022 將在今年晚些時候發行 .NET MAUI 工具支援。在今天的 Windows 上,您可以使用 XAML 和 .NET Hot Reload,以及用於 XAML、C#、Razor 和 CSS 等功能強大的編輯器來加速開發循環。使用 XAML 即時預覽和即時視覺化樹狀結構,可以在偵錯時預覽、對齊、檢查 UI 和編輯 UI。.NET MAUI 新的單一專案體驗現在包括專案屬性頁,以提供視覺化編輯體驗,以使用多平台設定來設定應用程式。

在 Mac 上,您現在可以載入單一專案和多專案 .NET MAUI 解決方案,以使用美觀、全新的原生 Visual Studio 2022 for Mac 體驗進行偵錯。用於提高開發 .NET MAUI 應用程式生產力的其他功能將在後續預覽版中提供。

我們建議您立即開始將程式庫更新到 .NET MAUI 並建立新的 .NET MAUI 專案。在深入探討將 Xamarin 專案轉換為 .NET MAUI 之前,請檢查相依性、Visual Studio 對 .NET MAUI 的支援狀態以及已發行的已知問題,以確定正確的轉換時間。請記住,Xamarin 將繼續受現代生命週期原則的支援,該原則聲明自上一個主要版本起 2 年。

資源

我們需要您的意見回饋

我們很樂意聽取您的意見!遇到任何問題時,請在 dotnet/maui 的 GitHub 上提交報告。

總結

藉助 .NET MAUI,您可以從單一程式碼基底建置適用於 Android、iOS、macOS 和 Windows 的原生應用程式,並使用與在 .NET 中實踐的相同的生產力模式。.NET MAUI 的精簡且解耦的 UI 和版面配置架構以及單一專案功能使您能夠專注於一個應用程式,而不是同時處理多個平台的獨特需求。藉助 .NET 6,我們不僅為 Android 提供了效能改進,而且還為整個平台目標提供了效能改進。

更少的平台程式碼,更多的共用程式碼,一致的標準和模式,輕量級和高效能的架構,行動和桌面原生體驗——這僅僅是開始。我們期待在接下來的幾個月裡看到程式庫和更廣泛的生態系統與 .NET MAUI 一起為 .NET 開發人員定義一個跨平台應用程式開發的新時代,使您和您的組織能夠實現更多目標。

立即體驗

轉載自博客園

原文作者:https://www.cnblogs.com/springhgui/p/16304492.html

原文連結:gui.h

翻譯原文地址:https://devblogs.microsoft.com/dotnet/introducing-dotnet-maui-one-codebase-many-platforms/

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2023/1/12

Maui Blazor 使用攝影機實現

由於 Maui Blazor 中界面是由 WebView 渲染,所以在使用 Android 的攝影機時無法獲取,因為原生的攝影機需要綁定界面元件

繼續閱讀