使用XAML无法在Xamarin表单中显示图像?

时间:2018-08-24 12:31:00

标签: xamarin xamarin.forms

我想使用XAML在Xamarin表单项目中显示一个图像,但没有显示。 这是代码:

<Image x:Name="myimage" Source="logo.jpg"/>

我已将myimage的构建操作设置为embedded resource。我也试过了

<Image x:Name="myimage" Source="MyXamarinProject.logo.jpg"/>

MyXamarinProject是我的命名空间。但是两者都不起作用。怎么了?

4 个答案:

答案 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并全部重建。