XAML 在.NET Maui中指定SVG图像的颜色

irtuqstp  于 2022-12-07  发布在  .NET
关注(0)|答案(2)|浏览(290)

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

gorkyyrv

gorkyyrv1#

我刚刚发现毛伊岛社区工具包有一个IconTintColorBehavior,它确实只想要我想要的。
用法:

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

jq6vz3qz2#

也许你可以用skiasharp。我给予一些例子。
首先添加Nuget,如SkiaSharp.Views、Maui、Controls、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文件将改变颜色。
我希望我的回答能帮助你。

相关问题