Xamarin表单-从XAML中的资源设置图像

时间:2019-01-08 11:27:29

标签: c# xaml xamarin.forms

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

backgroundImg.Source = ImageSource.FromResource("Myapp.Images." + imageName + ".jpg");

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

3 个答案:

答案 0 :(得分:3)

@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;
        }
    } 
}

然后将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"
         ...

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

<Image Source="{local:ImageResource MyProject.Resources.Images.Logo.png}" />

答案 1 :(得分:0)

使用以下代码:

<Image Source="{local:ImageResource YourMobileAppName.YouImageName.jpg}" />

有关更多信息,请阅读here

答案 2 :(得分:-1)

您可以像<Image Source="imageName" Aspect="AspectFit" />这样从xaml设置图像 确保您的图片在iOS资源和Android资源-> drawable

中可用