You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:20:21