在共享项目中使用嵌入式图像

时间:2016-03-07 13:23:31

标签: image xamarin xamarin.ios xamarin.forms

我想将嵌入的图像添加到我的共享项目(没有PCL)。我将图像添加到共享项目(不是特定于平台)作为嵌入式资源。如果我使用以下内容,我可以使用嵌入的图像:

ImageSource.FromResource("TestProject.Droid.Images.Document Folder.png")

只需使用字符串

  

ProjectNamespace.Subfolder.Filename.ext

不能像docs所描述的那样工作。一个人必须添加平台命名空间(iOS,Droid,...)。

其他可行的选项是修改 .projitems 。我添加了 LogicalName

<ItemGroup>
    <EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Document Folder.png">
        <LogicalName>Document Folder.png</LogicalName>
    </EmbeddedResource>
</ItemGroup>

但这不是开箱即用的东西。没有Resource ID。我也尝试过调查sample project,但这根本没有启动。

如何在共享项目中使用嵌入式图像?

1 个答案:

答案 0 :(得分:0)

official documentation仅处理PCL项目。对于共享项目,您必须使用完整字符串或添加LogicalName

完整字符串:

从完整字符串加载资源

ImageSource.FromResource("TestProject.Droid.Images.Document Folder.png")

字符串是这样构建的

<ProjectNamespace>.<PlatformNameSpace>.{<Subfolder>}.<Filename>.<Fileextension>

<Subfolder>仅在您拥有图像时使用,并且每个子文件夹都必须添加字符串。因此,您只需要一种机制来获取每个平台的完整命名空间。也许你定义一个属性,它返回一个不同的字符串(由你自己管理),具体取决于平台。

<强> LogicalName:

修改 .projitems 并为每张图片添加LogicalName

<ItemGroup>
    <EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Document Folder.png">
        <LogicalName>Document Folder.png</LogicalName>
    </EmbeddedResource>
</ItemGroup>

然后你可以这样做

ImageSource.FromResource("Document Folder.png")

有人提到您可以直接在Visual Studio中添加资源ID ,这样您就不需要自己添加LogicalName,但这似乎不是真。

所以没有更简单的方法。 PCL和共享项目之间的区别也用here解释(法语)。

Working with files in Xamarin.Forms文章还解释了一些重要细节。