使用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字符串。