在另一个文件夹中添加图像,而不是在xamarin跨平台中绘制

时间:2018-03-26 08:05:02

标签: c# xamarin

我可以使用

显示Drawable文件夹中的图像
<image source="live.png"/>

但我不知道如何从我在Resource中创建的其他文件夹中获取图像 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

Android对于放置图像的位置非常挑剔,所以最好的办法是将图像存储在常见项目中。在这个例子中,我假设一个标准的Xamarin.Forms解决方案,包括以下项目:Foo,Foo.Android,Foo.IOS和Foo.UWP。你的名字显然会有不同的名字,所以你必须用Foos代替......

以下所有代码都将进入公共代码项目Foo

首先,创建一个名为Extensions的新文件夹(只是为了保持代码整洁)并将以下类添加到其中:

[ContentProperty(nameof(Source))]
public class ImageResourceExtension : IMarkupExtension
{
    public string Source { get; set; }

    public object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Source == null)
        {
            return null;
        }

        var imageSource = ImageSource.FromResource(Source);

        return imageSource;
    }
}

现在将此类的命名空间添加到标记中:

xmlns:extensions="clr-namespace:Foo.Extensions"

接下来,再次在您的公共项目中创建图像文件夹,而不是在Android项目中。您也可以创建子文件夹。添加图像并确保每个图像的构建操作都设置为Embedded Resource

现在您可以像这样在XAML中引用这些图像:

<Image Source="{extensions:ImageResource Foo.Images.Subfolder.Bar.png}">

请注意,您需要提供图像的完整路径,包括项目名称(在本例中为Foo),文件夹由点而不是斜线分隔。