.NET MAUI可以使用SVG图像,这很不错,但是我还不能设置SVG图像的颜色。官方文档说我可以在项目文件中使用TintColor,但这不是一个好的解决方案,因为我希望能够根据特定条件使用不同的颜色。所以我们可以以某种方式指定SVG图像的颜色吗?
gorkyyrv1#
我刚刚发现毛伊岛社区工具包有一个IconTintColorBehavior,它确实只想要我想要的。用法:
<Image Source="shield.png"> <Image.Behaviors> <toolkit:IconTintColorBehavior TintColor="Red" /> </Image.Behaviors> </Image>
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文件将改变颜色。我希望我的回答能帮助你。
2条答案
按热度按时间gorkyyrv1#
我刚刚发现毛伊岛社区工具包有一个IconTintColorBehavior,它确实只想要我想要的。
用法:
jq6vz3qz2#
也许你可以用skiasharp。我给予一些例子。
首先添加Nuget,如SkiaSharp.Views、Maui、Controls、SkiaSharp.Svg。
在xaml中,定义一个SKCanvasView.PaintSurface事件处理程序,在这里你可以进行所有的绘制。
在.cs文件中,实现mycanvasview_PaintSurface方法。添加一些代码,如下所示:
你的svg文件将改变颜色。
我希望我的回答能帮助你。