如何在 Xamarin.Forms 中使用 XAML 从嵌入式资源设置图像

Dar*_*ter 4 xaml image embedded-resource xamarin xamarin.forms

在代码中设置图像源并指向 PCL 项目中特定文件夹中的嵌入图像(在本例中为“图像”)时,我会这样做:

backgroundImg.Source = ImageSource.FromResource("Myapp.Images." + imageName + ".jpg");
Run Code Online (Sandbox Code Playgroud)

有没有办法在 XAML 中做到这一点?

Ola*_*röm 11

@Code Pope 在他的回答中是正确的,但您还需要添加一个“ImageResourceExtension”,如@Gerald Versluis 的评论中所述。

为此,只需创建一个新文件(类)“ImageResourceExtension.cs”,如下所示:

using System;  
using System.Reflection;  
using Xamarin.Forms;  
using Xamarin.Forms.Xaml;

namespace ImageResourceExtension 
{
    [ContentProperty (nameof(Source))]
    class ImageResourceExtension : IMarkupExtension
    {
        public string Source { get; set; }

        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (Source == null) 
            {
                return null;
            }

            var imageSource = ImageSource.FromResource(Source, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
            return imageSource;
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

然后xmlns:local="clr-namespace:ImageResourceExtension"像这样添加到您的 xaml 文件中:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:ImageResourceExtension"
         ...
Run Code Online (Sandbox Code Playgroud)

现在您可以使用 xaml 代码访问嵌入式资源,如下所示:

<Image Source="{local:ImageResource MyProject.Resources.Images.Logo.png}" />
Run Code Online (Sandbox Code Playgroud)


Cod*_*ope 3

使用以下代码:

<Image Source="{local:ImageResource YourMobileAppName.YouImageName.jpg}" />
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请阅读此处