在 .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 中,将继续使用该SkiaSharp命名空间,但命名空间中的SkiaSharp.Views.Forms类型已移动到SkiaSharp.Views.Maui命名空间中。SkiaSharp.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 的方法。 有关详细信息,请参阅 Initialize SkiaSharp

初始化 SkiaSharp

通过在类中的对象上MauiAppBuilder调用UseSkiaSharp方法,在应用中MauiProgram初始化 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