我正在尝试在共享项目资源中显示和嵌入图像(如Microsoft文档上的here所述)。
我创建了ImageResourceExtension,项目进行了编译,但是在启动项目时出现以下错误:
无法从以下位置加载类型'Xamarin.Forms.Xaml.IReferenceProvider' 程序集'Xamarin.Forms.Core,Version = 2.0.0.0
这是我的代码:
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App1"
x:Class="App1.MainPage">
<StackLayout>
<Image x:Name="imgTest" Source="{local:ImageResource img.jpg}" />
</StackLayout>
</ContentPage>
EmbeddedImage.cs
namespace App1
{
[ContentProperty(nameof(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, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
return imageSource;
}
}
}
答案 0 :(得分:0)
如果将Image添加到Android drawable文件夹或iOS Resource文件夹,则不需要任何扩展名。您可以简单地做到:
private Person extractUserFromResultSet(ResultSet rs) throws SQLException {
// add this line below
Person person = new Person();
person.setId(rs.getInt("ID"));
person.setFName(rs.getString("FName"));
person.setLName(rs.getString("LName"));
person.setDOB(rs.getString("DOB"));
person.setDepartment(rs.getString("Department"));
person.setLocation(rs.getString("Location"));
person.setCellNr(rs.getString("Cellnr"));
person.setUsername(rs.getString("Username"));
person.setPassword(rs.getString("Password"));
return person;
}
答案 1 :(得分:0)
不知道答案是否仍然对您有效,但是我通常在解决方案之外有一个Assets文件夹,其中包含Android特定的文件夹(可绘制对象),iOS特定的文件夹(带有@ 2x和@ 3x的资源)和一个用于共享的图片。
在我的解决方案中,我将这些文件作为链接添加在应与之关联的文件夹中。在Android上的Resources / Drawable中,在iOS上的Resource中。在这种情况下,可以在两个平台之间共享公用文件,而无需实际复制它们。
作为奖励,这些资产的更新可以在我的解决方案外部的文件夹中覆盖,并且可以在我的解决方案内使用,而无需执行任何其他操作。
答案 2 :(得分:0)
您可以尝试一下,它对我有用
xyz.xaml.cs
imgName.Source = ImageSource.FromResource("ProjectName.Images.backicon.png");
xyz.xaml
<Image x:Name="imgName" />
希望此代码对您有帮助!
答案 3 :(得分:0)
替换:
<Image x:Name="imgTest" Source="{local:ImageResource img.jpg}" />
使用:
<Image x:Name="imgTest" Source="{local:ImageResource 'Project.Folder.img.jpg'}" />
然后替换:
var imageSource = ImageSource.FromResource(Source, typeof(...));
使用:
var imageSource = ImageSource.FromResource(Source);