是否有可能以Xamarin形式隐式应用转换器

时间:2018-08-13 13:05:25

标签: c# visual-studio xaml xamarin xamarin.forms

我有一个项目,在其资源文件夹中包含一堆图像。 但是现在我想通过下载图像来使用图像,然后再使用它。但是要做到这一点,我必须将转换器应用于所有图像。 是否可以将转换器隐式应用于所有图像。或者其他适合的方法?

public class ImageFileToImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!(value is string name)) return null;
          return ImageSource.FromFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), name));
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }

}

3 个答案:

答案 0 :(得分:0)

我不这样认为。

您可以做的是创建您自己的控件继承,始终在其中应用转换器,并在该控件上创建一个可绑定属性,该属性为常规属性提供营养。

答案 1 :(得分:0)

是的,您实际上可以。在App.xaml中设置样式(或在代码中取决于样式的位置,或其他ResourceDictionary),将样式设置为所有要将转换器用作Source的图像(我假设这就是您想要做的事)。

答案 2 :(得分:0)

我最终会这样使用

  public class StorageImage : Image
{
    public static string FolderName = "assest";

    public new object Source
    {
        get
        {
            return (ImageSource)base.Source;
        }
        set
        {
            base.Source = (ImageSource)ConvertFromInvariantString(value as string);
        }
    }

    public static object ConvertFromInvariantString(string value)
    {
        try
        {
            if (string.IsNullOrEmpty(value)) return null;
            return ImageSource.FromFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), FolderName, value));
        }
        catch (Exception ee)
        {
            return null;
        }
    }
}