我正在尝试在我的解决方案中的共享项目中上传图像,以便Android和iOS项目可以通过Xaml正常使用它。不工作,我不知道为什么。谁能解释为什么它不起作用?
扩展:
[ContentProperty("Source")]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Source == null)
{
return null;
}
// Do your translation lookup here, using whatever method you require
var imageSource = ImageSource.FromResource(Source);
return imageSource;
}
}
的Xaml:
<Image Source="{extensions:ImageResource MyProject.Assets.fechar.png}" HorizontalOptions="Start" HeightRequest="16" Focused="Image_Focused" BackgroundColor="Red" WidthRequest="15" />
在扩展中放置一个断点,它通常会对我列表中的每个项目进行一次。
我还尝试仅通过代码隐藏来插入硬编码绑定进行测试,并且使用ImageSource.FromResource也无法正常工作。
图像文件与文档所示的EmbbedResource一样。
答案 0 :(得分:2)
FromResource指的是Android或iOS项目,而不是共享项目。图像需要位于特定于平台的项目的相应文件夹中。
答案 1 :(得分:1)
不要使用扩展名。有更简单的方法。
根据Xamarin“目前没有资源标识符的隐式转换,您必须使用ImageSource.FromResource”和“因为没有从字符串到ResourceImageSource的内置类型转换器,所以这些类型的图像不能由Xaml本地加载”。因此,您无法在xaml中指定您的图像是共享的,但您可以使用后面的代码来绑定共享图像。
在xaml:
<Image Source="{Binding Image}" HorizontalOptions="Start" WidthRequest="80"/>
然后在代码背后
public ImageSource Image
{
get
{
return ImageSource.FromResource("ButtonRendererDemo.Resources.icon1.png"); //from PCL
}
}
下面是项目结构
/////////////////////////////////////////////// ///////////////////
使用共享项目进行测试。以下是结构
关键是将您的共享项目的引用添加到您调用FromResource的PCL。共享项目被注入PCL 然后在我的项目结构中它是
public ImageSource Image
{
get
{
//return ImageSource.FromResource("ButtonRendererDemo.Resources.icon1.png"); //from PCL
return ImageSource.FromResource("ButtonRendererDemo.Pictures.icon1.png"); //from Shared
}
}
/////////////////////////////////////////////// ///////////////
如果没有任何作用,请使用以下代码查找您的资源。在使用System.Reflection调用FromResource add的文件中;然后添加以下代码
var assembly = typeof(App).GetTypeInfo().Assembly;
foreach (var res in assembly.GetManifestResourceNames())
{
System.Diagnostics.Debug.WriteLine("found resource: " + res);
}
您应该在“输出”窗口中看到类似
的内容找到资源:someNamespace.Pictures.icon1.png - 这是您需要使用的资源。
您没有回答我关于您的项目结构的问题。然后我可以给你一个确切的答案。我怀疑你的图片路径是“MyProject.Droid.Assets.fechar.png”