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?
3 Réponses :
Utilisez le code suivant:
<Image Source="{local:ImageResource YourMobileAppName.YouImageName.jpg}" />
Pour plus d'informations, lisez ici
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
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
Il a demandé spécifiquement de récupérer l'image du projet partagé
@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; } } }