Xamarin表单FFImageLoading.Svg.Forms:在对象初始化后设置ReplaceStringMap不会更改图像

时间:2019-03-11 18:27:25

标签: xamarin.forms ffimageloading

使用Xamarin.FFImageLoading.Svg.Forms,我创建了一个自定义类RecolorableSvg,该类继承自SvgCachedImage,具有可绑定属性NewColor,该属性通过设置{{ 1}}。不幸的是,只有在RecolorableSvg对象初始化之前设置NewColor才能起作用。

将NewColor设置为显式颜色(例如XAML:ReplaceStringMap)将成功为SVG重新着色,但是通过XAML绑定甚至直接通过在创建RecolorableSvg之后运行的代码来设置NewColor不会导致SVG要重新着色。

这里是设置NewColor时在RecolorableSvg中调用的方法:

NewColor="Red"

设置了ReplaceStringMap之后,我尝试添加private static void OnNewColorPropertyChanged(BindableObject bindable, object oldValue, object newValue) { var svg = (RecolorableSvg)bindable; var newColor = (Color)newValue; string oldColorText = svg.OriginalColorText; if ((Color)oldValue != Color.Default) { oldColorText = ((Color)oldValue).GetHexString(); } Console.WriteLine($"'{oldColorText}' --> '{newColor.GetHexString()}'"); svg.ReplaceStringMap = new Dictionary<string, string> { { $"fill=\"{oldColorText}\"", $"fill=\"{newColor.GetHexString()}\"" } }; } svg.ReloadImage();,但是唯一可以更改颜色的方法是将svg.OnPropertyChanged(nameof(FFImageLoading.Forms.CachedImage.SourceProperty));显式设置为URI字符串。

0 个答案:

没有答案