簡體   English   中英

Xamarin Xam.Plugins.Forms.Svg更改SvgPath以重新呈現圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM