[英]Xamarin Xam.Plugins.Forms.Svg change SvgPath to rerender the image
我使用Xam.Plugins.Forms.Svg支持svg图像。 我需要更改图像,所以我尝试:
在xaml中绑定 :
<abstractions:SvgImage
SvgPath="{Binding CurrentWeather.IconSource, StringFormat='Umbrella.Images.{0:F0}.svg'}"
....
/>
直接从C#更改它:
icon.SvgPath = "Umbrella.Images." + currentWeather.IconSource + ".svg";
SvgPath属性确实会更改,但是不会重新渲染图像。
有什么解决办法吗?
这是渲染器编写方式的一个问题 ,您需要创建一个新的 SvgImage
对象,并以渲染器的工作方式替换页面上的当前对象,以便从新的SVG文件更新静态Image
。
您可以通过覆盖OnElementPropertyChanged
事件来修补渲染器,并响应SvgPath
PropertyName的更改:
iOS示例:
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == "SvgPath")
{
var svgStream = _formsControl.SvgAssembly.GetManifestResourceStream(_formsControl.SvgPath);
var reader = new SvgReader(new StreamReader(svgStream), new StylesParser(new ValuesParser()), new ValuesParser());
var graphics = reader.Graphic;
var canvas = new ApplePlatform().CreateImageCanvas(graphics.Size);
graphics.Draw(canvas);
var image = canvas.GetImage();
var uiImage = image.GetUIImage();
Control.Image = uiImage;
}
}
参考: https : //github.com/paulpatarinski/Xamarin.Forms.Plugins/blob/eab230fcf4158a288387727c15903a954e01cdaa/SVG/SVG/SVG.Forms.Plugin.Android/SvgImageRenderer.cs
参考: https : //github.com/paulpatarinski/Xamarin.Forms.Plugins/blob/eab230fcf4158a288387727c15903a954e01cdaa/SVG/SVG/SVG.Forms.Plugin.iOS/SvgImageRenderer.cs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.