我想使用XAML
在Xamarin表单项目中显示一个图像,但没有显示。
这是代码:
<Image x:Name="myimage" Source="logo.jpg"/>
我已将myimage的构建操作设置为embedded resource
。我也试过了
<Image x:Name="myimage" Source="MyXamarinProject.logo.jpg"/>
MyXamarinProject
是我的命名空间。但是两者都不起作用。怎么了?
答案 0 :(得分:3)
为避免降低应用程序性能或以不同屏幕分辨率显示图像时出现问题,建议的方法是在每个平台特定的文件夹中添加每个图像:
Android:项目->资源->可绘制(或每个分辨率可绘制文件夹(-hdpi,-xhdpi ...))
iOS:您可以为每个图像创建资产目录,也可以使用Project-> Resources文件夹。
然后,在XAML文件上使用图像名称。不需要代码。
答案 1 :(得分:1)
为此检查Microsoft Docs时,它并不只是指定路径那么简单。
首先,创建一个IMarkupExtension
[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;
}
}
然后在您的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:WorkingWithImages;assembly=WorkingWithImages"
x:Class="WorkingWithImages.EmbeddedImagesXaml">
<StackLayout VerticalOptions="Center" HorizontalOptions="Center">
<!-- use a custom Markup Extension -->
<Image Source="{local:ImageResource WorkingWithImages.beach.jpg}" />
</StackLayout>
</ContentPage>
请注意,您必须在页面上添加自定义名称空间,在这种情况下:xmlns:local="clr-namespace:WorkingWithImages;assembly=WorkingWithImages"
答案 2 :(得分:0)
因此,我不能仅使用XAML
显示图像。我对这两个答案都很满意。虽然这是我显示图像的方法,但没有粘贴到android和iOS(到各自的文件夹)中,也没有制作IMarkupExtension
。
我在C#
代码后面放了一行代码,并且行得通:
myimage.Source = ImageSource.FromResource("MyXamarinProject.logo.jpg");
//logo.jpg must be Embedded Resource.
这可能不是正确的答案,但可以选择。谢谢!
答案 3 :(得分:0)
我在Visual Studio Mac上遇到了同样的问题: 我的XAML:
<Image x:Name="myimage" Source="logo.jpg"/>
我的资源是:logo.jpg
但是该文件已保存为文件系统中的Logo.jpg(大写L)。
我刚刚将其修改为logo.jpg并全部重建。