Xamarin.Forms项目是否需重复添加图片?如何单次添加?
关于Xamarin.Forms中图片只添加一次的解决方案
嘿,我来帮你搞定这个问题!首先明确说:完全不需要为每个平台单独添加图片,用嵌入式资源的方式就能只加一次,让所有平台共用。你之前用嵌入式资源出错,大概率是资源名称的写法不对,咱们一步步来修正:
一、嵌入式资源的正确操作步骤
1. 图片放置与生成操作设置
- 把图片放到Xamarin.Forms共享项目里(比如新建一个
Images文件夹,把myImage.jpg放进去) - 右键图片 → 属性 → 确认生成操作设置为
Embedded resource(你这步已经做对了,很好)
2. 搞对资源名称是关键!
这是绝大多数人踩坑的地方,嵌入式资源的名称是程序集命名空间 + 文件夹路径 + 文件名,而且是区分大小写的!
比如:
- 你的项目命名空间是
MyProject - 图片在
Images文件夹里 - 图片文件名是
myImage.jpg
那正确的资源名称应该是:MyProject.Images.myImage.jpg
如果不确定自己的资源名到底是什么,可以用这段代码枚举所有嵌入式资源,在输出窗口查看:
using System.Reflection; // 在页面的构造函数或者初始化方法里加这段 var assembly = typeof(你的页面类名).GetTypeInfo().Assembly; foreach (var resName in assembly.GetManifestResourceNames()) { System.Diagnostics.Debug.WriteLine("当前嵌入式资源:" + resName); }
找到对应图片的完整名称,复制过来用就不会错了。
3. 正确加载图片
用ImageSource.FromResource加载时,最好指定程序集(避免跨程序集的问题),代码如下:
var assembly = typeof(你的页面类名).GetTypeInfo().Assembly; myImage.Source = ImageSource.FromResource("MyProject.Images.myImage.jpg", assembly);
二、为什么你之前的代码会出错?
大概率是这两个原因:
- 资源名称写错了:比如漏了文件夹名、命名空间不对,或者大小写和实际文件不一致
- 没有指定程序集:如果你的图片在单独的类库项目里,必须指定对应的程序集才能找到资源
三、其他可选的“只加一次”方式
除了嵌入式资源,你还可以用:
- .NET Standard项目的Embedded resource(和上面步骤一致)
- 共享项目的Content类型资源(不过嵌入式资源更推荐,因为打包后更安全)
总之,只要按照正确的步骤设置嵌入式资源,就能实现只添加一次图片供所有平台使用啦!
内容的提问来源于stack exchange,提问作者user875234
相关产品推荐
相关产品推荐

