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

Xamarin中使用C#加载嵌入资源图片生成列表失败怎么办

问题原因

直接给Image.Source属性赋值字符串的方式,无法自动识别设为「嵌入资源(Embedded Resource)」的图片:这种传值方式默认仅解析平台原生资源、包内松散文件、网络图片地址。你在XAML中能正常加载,是因为用了自定义的localPic:image标记扩展实现了嵌入资源的解析逻辑,C#代码中直接传字符串没有走这套解析流程,自然无法显示图片。另外你贴的测试代码里还引用了未定义的img变量,会直接导致编译失败,需要先删除stackkk.Children.Add(img);这行。

正确实现方法

嵌入资源需要通过ImageSource.FromResource方法手动加载,参数要传入资源的完整ID、以及资源所在的程序集对象。

  • 资源完整ID和你XAML标记扩展里写的路径规则完全一致:默认命名空间.文件夹层级.文件名,你这里的目标图片正确ID就是tattrank.images.indexPic.jpg
  • 程序集对象可以通过当前页面的类型获取,避免硬编码出错

单张图片加载示例代码

首先引入需要的命名空间:

using System.Reflection;
using Xamarin.Forms;

页面内加载图片的测试代码:

Label lbl = new Label { Text = "Hello" };

// 加载嵌入资源图片
var embeddedImg = new Image
{
    Source = ImageSource.FromResource(
        "tattrank.images.indexPic.jpg", 
        typeof(MainPage).GetTypeInfo().Assembly
    ),
    HeightRequest = 250 // 可按需设置尺寸参数
};

stackkk.Children.Add(embeddedImg);
stackkk.Children.Add(lbl);

批量加载图片生成列表的方法

把所有要加载的图片资源完整ID存到字符串列表里,循环生成Image控件即可:

// 所有要加载的嵌入资源图片ID列表
var imageResIds = new List<string>
{
    "tattrank.images.indexPic.jpg",
    "tattrank.images.secondPic.jpg",
    "tattrank.images.thirdPic.jpg"
};

foreach (var resId in imageResIds)
{
    var img = new Image
    {
        Source = ImageSource.FromResource(resId, typeof(MainPage).GetTypeInfo().Assembly),
        HeightRequest = 200,
        Margin = new Thickness(0,10)
    };
    stackkk.Children.Add(img);
}
路径排查方法

如果还是加载失败,用下面的调试代码把当前程序集内所有嵌入资源的ID打印到输出窗口,对照检查路径拼写、大小写(嵌入资源ID严格区分大小写)是否正确:

foreach (var resourceId in typeof(MainPage).GetTypeInfo().Assembly.GetManifestResourceNames())
{
    System.Diagnostics.Debug.WriteLine($"找到嵌入资源:{resourceId}");
}

内容的提问来源于stack exchange,提问作者MrTimberfall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:09:19