我想将嵌入的图像添加到我的共享项目(没有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,但这根本没有启动。
如何在共享项目中使用嵌入式图像?
答案 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文章还解释了一些重要细节。