2
votes

Comment définir une image à partir d'une ressource incorporée à l'aide de XAML dans Xamarin.Forms

Lors de la définition d'une source d'image dans le code et pointant vers une image intégrée dans un dossier spécifique du projet PCL ('Images' dans cet exemple), je ferais ceci:

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

Y a-t-il un moyen de faire cela en XAML?


0 commentaires

3 Réponses :


2
votes

Utilisez le code suivant:

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

Pour plus d'informations, lisez ici


4 commentaires

J'avais essayé cela avant mais j'obtiens l'erreur «Type ImageResource not found in xmlns clr-namespace» et il ne sera pas construit.


Et avez-vous inséré le nom de votre application comme préfixe de l'image?


ont essayé {local: ImageResource MyApp.Images.testImg.jpg} et aussi {local: ImageResource MyApp.testImg.jpg}


@ DarkW1nter vous devrez implémenter l'extension qui se trouve sur la page et l'importer dans l'espace de noms local à la racine de votre page. Vous devrez toujours faire des ajustements pour qu'il prenne probablement des noms de fichiers d'image dynamiques



-2
votes

vous pouvez définir une image à partir de xaml comme Assurez-vous que votre image est disponible dans les ressources iOS et dans les ressources Android -> dessinable


1 commentaires

Il a demandé spécifiquement de récupérer l'image du projet partagé



3
votes

@Code Pope a raison dans sa réponse, mais vous devez également ajouter une "ImageResourceExtension" comme indiqué dans les commentaires de @Gerald Versluis.

Pour ce faire, créez simplement un nouveau fichier (classe) "ImageResourceExtension.cs "comme ceci:

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

Ensuite, ajoutez xmlns: local =" clr-namespace: ImageResourceExtension " à votre fichier xaml comme ceci:

<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"
         ...

Vous pouvez désormais accéder à une ressource intégrée en utilisant un code xaml comme celui-ci:

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


0 commentaires