Xamarin.Forms嵌入式图像没有显示

时间:2017-06-27 18:18:06

标签: xamarin.forms

stackoverflow上有几篇帖子涵盖了这一点,但没有一个是原因。我已经尝试了几个来源,包括文档,我无法让它工作。 我正在关注Udemy的mosh教程,他正在展示如何使用嵌入式资源文件。 我正在使用Visual Studio 2017。 我在HelloWorld文件夹中添加了一个名为images的文件夹,并在其中放置了一个名为background.jpg的图像。

右键单击图像并将Build Action设置为EmbeddedReesource时,您应该获得资源ID。没有,甚至没有框出现。我认为这是一个被删除的新功能。

我发现资源路径是HelloWorld.images.background.jpg。

我的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"
         x:Class="HelloWorld.ImagePage"
         BackgroundColor="Black">
   <ContentPage.Content>
      <Image x:Name="image" Aspect="AspectFill" />
        </ContentPage.Content>
    </ContentPage>

接下来,我的c#代码是这样的:

    public ImagePage ()
    {
        InitializeComponent ();

     image.Source =  ImageSource.FromResource("HelloWorld.images.background.jpg");
    }

我已经尝试将图像放在Resources / Drawable下的android项目中,但这不能达到目的吗?

任何帮助都会很棒。提前谢谢。

这是我的VS解决方案资源管理器: Solution Explorer

1 个答案:

答案 0 :(得分:-1)

仍然支持这种嵌入图像的方式。请查看有关如何操作的文档中的this page。这些是基本步骤:

  • 将文件的构建操作设置为EmbeddedResource,您可以在文件属性中执行此操作
  • 请参阅PCL中带有点分隔标识符的图像。文件名构建如下: AssemblyName 文件夹 ImageName ext

如果您的图片不在文件夹中,您可以离开,如果它在多个文件夹中,则添加每个用点分隔的图像。一个例子可能如下所示:

var embeddedImage = new Image { Aspect = Aspect.AspectFit };
embeddedImage.Source = ImageSource.FromResource("WorkingWithImages.beach.jpg");

此处程序集(可能是您PCL的项目名称)名为“WorkingWithImages”,文件不在文件夹中,文件名为“beach.jpg”。对于Android,我认为您还应该注意,除了数字,字母和下划线之外,您不要使用连字符或任何其他字符。

话虽如此,你也说:

  

我已经尝试将图像放在android项目下   资源/可绘制,但这不是打败目的吗?

我不完全确定你在这里的意思,但我认为你认为它从一个代码库中击败了多平台应用程序的目的。我必须在那里不同意你的意见。虽然我看到你如何能够这样想,但使用图像是非常特定于平台的。所有平台都有一种非常不同的显示和缩放图像的方式,几乎不可能协调所有Xamarin。将图像放在PCL中就像现在一样,将完全禁用整个缩放机制,突然负责使它在各种设备,分辨率和外形尺寸上都看起来很好。这就是为什么我总是拥有每个平台项目的图像资源。