如何在非WASM的Blazor桌面应用(Blazor Hybrid)中集成SkiaSharp?
在Blazor Hybrid桌面应用中集成SkiaSharp(无需WASM)
当然存在这样的方案。Blazor Hybrid本质是将Blazor组件嵌入原生桌面框架(MAUI、WPF、WinForms等),完全可以通过原生平台集成SkiaSharp的方式实现,不需要依赖WASM。
核心思路
借助Blazor Hybrid与原生桌面框架的绑定能力,封装原生SkiaSharp绘图控件为Blazor组件,让SkiaSharp直接在原生桌面进程中运行,完全规避WASM的沙箱环境。
具体实现方案
1. 跨平台首选:.NET MAUI Blazor
MAUI官方支持SkiaSharp,可直接实现Windows/Mac/Linux全平台兼容:
- 安装NuGet包:
SkiaSharp.Views.Maui.Controls和SkiaSharp.Views.Maui - 创建自定义MAUI视图继承
SKCanvasView,在PaintSurface事件中编写SkiaSharp绘图逻辑 - 将原生视图封装为Blazor组件,供Blazor页面调用
- 示例代码:
// 原生MAUI绘图视图 public class CustomSkiaCanvas : SKCanvasView { protected override void OnPaintSurface(SKPaintSurfaceEventArgs e) { base.OnPaintSurface(e); var canvas = e.Surface.Canvas; canvas.Clear(SKColors.White); // 示例:绘制蓝色圆形 using var paint = new SKPaint { Color = SKColors.Blue, StrokeWidth = 4 }; canvas.DrawCircle(150, 150, 80, paint); } } // Blazor组件封装 public class SkiaRenderer : ComponentBase { protected override void BuildRenderTree(RenderTreeBuilder builder) { builder.OpenComponent<CustomSkiaCanvas>(0); builder.CloseComponent(); } } - 在Blazor页面中直接使用:
<SkiaRenderer />
2. WPF Blazor宿主
针对Windows平台的WPF Blazor应用:
- 安装NuGet包:
SkiaSharp.Views.WPF - 使用WPF的
SKElement控件,在PaintSurface事件中实现绘图逻辑 - 通过Blazor与WPF的绑定机制,将
SKElement封装为Blazor组件嵌入页面
3. WinForms Blazor宿主
针对Windows平台的WinForms Blazor应用:
- 安装NuGet包:
SkiaSharp.Views.WindowsForms - 使用
SKControl或SKPictureBox作为绘图容器,处理PaintSurface事件 - 同样通过Blazor与WinForms的绑定能力,将SkiaSharp控件封装为Blazor组件
关键优势
- 绘图逻辑运行在原生桌面进程,性能与纯原生SkiaSharp应用一致
- 可直接访问本地文件、硬件加速等原生系统资源,不受WASM沙箱限制
- 兼容性完全依赖宿主框架:MAUI支持全平台,WPF/WinForms针对Windows优化
内容的提问来源于stack exchange,提问作者Redy
相关产品推荐
相关产品推荐

