Xamarin Forms FFImageLoading.Svg.Forms: установка ReplaceStringMap после инициализации объекта не меняет изображение - PullRequest
0 голосов
/ 11 марта 2019

Используя Xamarin.FFImageLoading.Svg.Forms Я создал пользовательский класс RecolorableSvg, который наследуется от SvgCachedImage с привязываемым свойством NewColor, которое изменяет цвета в SVG, устанавливая ReplaceStringMap.К сожалению, это работает, только если я установлю NewColor до инициализации объекта RecolorableSvg.

Установка для NewColor явного цвета (например, XAML: NewColor="Red") успешно перекрасит SVG, но установка NewColor с помощью привязки XAML илидаже непосредственно через код, который запускается после создания RecolorableSvg, не вызывает перекрашивание SVG.

Вот метод, который вызывается в RecolorableSvg, когда установлен NewColor:

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()}\"" }
  };
}

После установки ReplaceStringMap я попытался добавить svg.ReloadImage(); и svg.OnPropertyChanged(nameof(FFImageLoading.Forms.CachedImage.SourceProperty));, но единственный способ получить его для изменения цвета - это явно установить svg.Source в строку URI.

...