【问题标题】:Xamarin.Forms embedded image not showingXamarin.Forms 嵌入图像未显示
【发布时间】:2017-06-29 23:21:10
【问题描述】:

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

当您右键单击图像并将构建操作设置为 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");
    }

并且我已经尝试将图像放在资源/Drawable 下的 android 项目中,但这不会违背目的吗?

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

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

【问题讨论】:

  • 您能否显示您的解决方案结构的屏幕截图以确保我们理解它
  • “当您右键单击图像并将构建操作设置为 EmbeddedReesource 时,您应该获得一个资源 ID” - 仅当您将其添加为 Android 项目中的资源并且仅在 Android 项目中,而不是在 PCL 中
  • "没有,连盒子都没有出现。" - 这可能是它不起作用的原因。您需要在 Properties 中将其设置为 EmbeddedResource。

标签: xamarin.forms


【解决方案1】:

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

  • 将文件的 Build Action 设置为EmbeddedResource,您可以在文件的属性中执行此操作
  • 使用点分隔标识符引用来自 PCL 的图像。文件名是这样建立的:AssemblyName.Folder.ImageName.ext

如果您的图片不在文件夹中,您可以将其保留,如果在多个文件夹中,请添加每个文件夹,并用点分隔。一个示例可能如下所示:

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

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

话虽如此,你也说:

我已经尝试将图像放在 android 项目下 Resources/Drawable,但这不是违背了目的吗?

我不完全确定你在这里的意思,但我认为你认为它违背了单一代码库的多平台应用程序的目的。我必须不同意你的观点。尽管我知道您会怎么想,但使用图像是非常特定于平台的。所有平台都有非常不同的显示和缩放图像的方式,并且几乎不可能为 Xamarin 协调所有这些。像您现在想要的那样在 PCL 中保存图像,将完全禁用整个缩放机制,并且突然您有责任让它在各种设备、分辨率和外形尺寸上看起来都很好。这就是为什么我总是拥有每个平台项目的图像资源。

【讨论】:

  • 感谢您的链接,但我已经看到了这个页面,我已经完全按照它所说的做了,但我仍然无法在 Android 项目中显示图像。我现在不关心 iOS 部分。我只是想让它出现。我将 Build Action 设置为 EmbeddedResource,并将其从文件夹中删除。我尝试使用 ImageSource.FromResource("HelloWorld.background.jpg") 和 ImageSource.FromResource("background.jpg") 这在我编写 Xamarin Android 代码时是半简单的,但 Xamarin.Forms 是一种奇怪的动物。我使用的是 1920x1080 的图像,如果这会有所不同,只是为了测试。
  • 这是一个长镜头,但请尝试使用较小的图像和/或检查您的构建输出。 Android 对图像格式有点挑剔。如果它太大,它只会在构建输出中向你抱怨。
  • 我下载了示例项目,它工作正常。然后我改变了我的程序看起来就像它一样。它没有用。然后我注意到示例项目使用的是旧版本的 Xamarin.Forms。我无法升级它,因为它说:严重性代码描述项目文件行抑制状态错误无法解决依赖关系。 “Xamarin.Android.Support.Design 25.3.1”与“Xamarin.Forms 2.3.4.247 约束:Xamarin.Android.Support.Design (= 23.3.0)”不兼容。事情一定已经改变了。 (我假设)因为这是唯一的解决方案。
  • 在文档中这仍然是描述的方式:docs.microsoft.com/xamarin/xamarin-forms/user-interface/… 什么不适合你?
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 2019-05-25
  • 2019-02-17
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2013-06-24
  • 2016-12-22
相关资源
最近更新 更多