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
相关产品推荐
相关产品推荐

