在中指定SVG图像的颜色.NET毛伊岛



。NET MAUI能够使用SVG图像,这真的很好,但我还不能设置SVG图像的颜色。官方文档指出,我可以在项目文件中使用TintColor,但这不是一个好的解决方案,因为我希望能够根据特定条件使用不同的颜色。那么,我们能以某种方式指定SVG图像的颜色吗?

我刚刚发现毛伊岛社区工具包有一个IconTintColorBehavior,它正是我想要的。

用法:

<Image Source="shield.png">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>

命名空间

xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"

也许您可以使用skiasharp。我举了一些例子。

首先添加Nuget,例如SkiaSharp。视图。毛伊岛。控制装置,SkiaSharp。Svg。

在xaml中,定义SKCanvasView。PaintSurface事件处理程序是执行所有绘图的地方。

<StackLayout>
<skiact:SKCanvasView  WidthRequest="500" HeightRequest="500" x:Name="mycanvasview" PaintSurface="mycanvasview_PaintSurface">
</skiact:SKCanvasView>
</StackLayout>

在.cs文件中,实现mycanvasview_PaintSurface方法。添加一些代码如下:

private void mycanvasview_PaintSurface(object sender, SkiaSharp.Views.Maui.SKPaintSurfaceEventArgs e)
{
SKImageInfo info = e.Info;
SKSurface surface = e.Surface;
SKCanvas canvas = surface.Canvas;
canvas.Clear();
Stream stream = LoadStream(typeof(MainPage),"myfile.svg");
SKSvg svg = new SKSvg();
svg.Load(stream);
using (var paint = new SKPaint())
{
paint.ColorFilter = SKColorFilter.CreateBlendMode(
SKColors.Yellow,      
SKBlendMode.SrcIn); 
canvas.DrawPicture(svg.Picture ,paint);
}
}

private static Stream LoadStream(Type type, string v)
{
Assembly assembly = type.GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream(v);
return stream;
}

svg文件将更改颜色。

我希望我的回答能对你有所帮助。

最新更新