分享方式:


在 .NET MAUI 中重複使用 SkiaSharp 程式代碼

SkiaSharp 是適用於 .NET 和 C# 的 2D 圖形系統,可繪製 2D 向量圖形、位圖和文字。 它由開放原始碼的Skia圖形引擎提供,在Google產品中廣泛使用。 您可以在 .NET 多平臺應用程式 UI (.NET MAUI) 應用程式中重複使用來自 Xamarin.Forms 應用程式的 SkiaSharp 程式代碼,但有一些次要更新。

若要在 .NET MAUI 應用程式中從 Xamarin.Forms 應用程式重複使用您的 SkiaSharp 程式代碼,您必須:

  • 從專案移除 Xamarin.Forms SkiaSharp NuGet 套件,並將 .NET MAUI SkiaSharp NuGet 套件新增至您的專案。
  • 更新命名空間。
  • 初始化 SkiaSharp。

新增 NuGet

適用於 .NET MAUI 的 SkiaSharp 會封裝為一系列 NuGet 套件。 將 Xamarin.Forms 應用程式移轉至 .NET MAUI 應用程式之後,您應該從您的應用程式中移除所有現有的 SkiaSharp NuGet 套件。 然後,使用 NuGet 套件管理員來搜尋 SkiaSharp.Views.Maui.Controls NuGet 套件,並將其新增至您的專案。 這也會安裝相依的SkiaSharp套件。

更新命名空間

使用 SkiaSharp 的 Xamarin.Forms 應用程式通常會使用命名空間和命名空間中的SkiaSharpSkiaSharp.Views.Forms類型。 在適用於 .NET MAUI 的 SkiaSharp.Views.Forms SkiaSharp 中,您將繼續使用 命名空間,SkiaSharp但命名空間中的類型已移至 SkiaSharp.Views.MauiSkiaSharp.Views.Maui.Controls 命名空間。

下表顯示您需要用來在 .NET MAUI 應用程式中建置 SkiaSharp 程式代碼的命名空間:

.NET MAUI 命名空間 詳細資料
SkiaSharp 包含所有 SkiaSharp 類別、結構和列舉。
SkiaSharp.Views.Maui 包含支援觸控互動和事件自變數的類型。
SkiaSharp.Views.Maui.Controls 包含 SKCanvasView 類別,其衍生自 .NET MAUI View 類別,並裝載您的 SkiaSharp 圖形輸出。 也包含不同的 ImageSource 類別。
SkiaSharp.Views.Maui.Controls.Hosting 包含 UseSkiaSharp 用來在 .NET MAUI 應用程式中初始化 SkiaSharp 的方法。 如需詳細資訊,請參閱 初始化 SkiaSharp

初始化 SkiaSharp

在應用程式中呼叫 物件MauiProgram上的 MauiAppBuilder 方法,以在應用程式中UseSkiaSharp初始化 SkiaSharp:

using Microsoft.Extensions.Logging;
using SkiaSharp.Views.Maui.Controls.Hosting;

namespace MyMauiApp;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .UseSkiaSharp()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            });

        #if DEBUG
        builder.Logging.AddDebug();
        #endif

        return builder.Build();
    }
}

注意

UseSkiaSharp呼叫 方法會要求您新增 using 命名空間的 SkiaSharp.Views.Maui.Controls.Hosting 指示詞。