2016-07-23 25 views
1

Ich benutze Xam.Plugins.Forms.Svg, um SVG-Bilder zu unterstützen. Ich brauche das Bild zu ändern, so dass ich versuchte:Xamarin Xam.Plugins.Forms.Svg Ändere SvgPath, um das Bild erneut zu rendern

in XAML Bindung:

<abstractions:SvgImage 
    SvgPath="{Binding CurrentWeather.IconSource, StringFormat='Umbrella.Images.{0:F0}.svg'}" 
    .... 
    /> 

ändern direkt von # C:

icon.SvgPath = "Umbrella.Images." + currentWeather.IconSource + ".svg"; 

Das SvgPath Attribut ändert, aber das Bild verrottet nicht.

Gibt es eine Lösung dafür?

+0

tut das Quelle (Symbol) implementieren INotifyPropertyChanged? – Jason

+0

@Jason Mein Ansichtsmodell implementiert INotifyPropertyChanged und alle Beschriftungen werden aktualisiert. – cuddlecheek

Antwort

1

Es ist eine Ausgabe in der Art, wie die Renderer geschrieben werden, müßten Sie ein neuesSvgImage Objekt zu erstellen und die aktuellen auf Ihrer Seite, wie die Renderer arbeiten, um für die statischen Image ersetzen zu sein aktualisiert von einer neuen SVG-Datei.

können Sie die Renderer Patch durch Überschreiben der OnElementPropertyChanged Ereignis und reagieren auf SvgPath Property Änderungen:

iOS Beispiel:

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; 
    } 
} 

Ref: https://github.com/paulpatarinski/Xamarin.Forms.Plugins/blob/eab230fcf4158a288387727c15903a954e01cdaa/SVG/SVG/SVG.Forms.Plugin.Android/SvgImageRenderer.cs

Ref: https://github.com/paulpatarinski/Xamarin.Forms.Plugins/blob/eab230fcf4158a288387727c15903a954e01cdaa/SVG/SVG/SVG.Forms.Plugin.iOS/SvgImageRenderer.cs

+0

Danke, genau das brauche ich. – cuddlecheek