Je travaille actuellement avec VS Studio 2010, .NET 4.0. Voici mon scénario:
J'ai actuellement un projet de bibliothèque de classe appelé "Images" contenant un sous-dossier appelé "Icônes". Toutes mes icônes vivent actuellement dans ce projet et sont accessibles par plusieurs projets via siteoforigin. Tout se passe bien dans le concepteur, mais les images ne s'affichent pas pendant l'exécution.
Voici la structure de mon dossier:
Tous les projets font référence à la classe Images lib. proj, et toutes les icônes du sous-dossier "icons" du projet "Images" sont définies sur: "Build Action = Resource".
Le xaml ressemble à ceci (qui est parfaitement visible lors de la conception):
<Button Name="Button1" Click="Button1_Click">
<Button.Content>
<Image Source="pack://siteoforigin:,,,/Data.Images;component/Icons/Button1.png" />
</Button.Content>
</Button>
siteoforigin
est pour les fichiers copiés dans le répertoire exécutable ou les sous-répertoires, pour les ressources vous devriez utiliser application
comme autorité autant que je sache.
Chemin d'accès: nom du site du fichier d'origine, y compris son chemin d'accès par rapport à l'emplacement à partir duquel l'assembly exécutable a été lancé.
Cela me rendait fou. J'ai essayé beaucoup de choses différentes basées sur divers articles mais rien n'a fonctionné. Ma fenêtre et mon image xaml se trouvent dans une DLL distincte de l'assembly exécutable. Je ne sais pas si cela faisait partie de mon problème.
Au final, j'ai eu du succès avec:
La chaîne visual studio formatée pour mon image était:
<Image Source="/Paperless.Common;component/Resources/Checkbook.png" />
où "Paperless.Common" était le nom de mon assemblée et "Checkbook.png" était mon image résidant dans un dossier "Ressources".
Peut-être que l'action de génération de l'image n'est pas définie sur la ressource. S'il s'agit de quelque chose d'autre, y compris Embedded Resource, il ne s'affichera pas correctement au moment de l'exécution.
Eh bien, j'ai passé plus de 3 heures sur ce problème. Vos réponses m'ont aidé à résoudre partiellement le problème et c'est ce qui m'a poussé à ajouter à cette discussion utile.
J'ai résolu mon problème en tant que:
Après tout cela, je me suis retrouvé moi-même lorsque j'utilisais l'image plusieurs fois ou que j'essayais de changer d'image sur le même contrôle d'image pour changer le chemin d'accès à l'image sur XAML ou dans les propriétés du contrôle d'image:
source="pack:://siteoforigin:,,,/Resources/image.png"
Je suis venu ici pour faire apparaître mes données d’image au moment de la conception (problème inverse).
ImagePath="pack://application:,,,/MyApplicationName;component/Images/Icons/Button1.png"
est ce que le truc a fait, en plus de Build Action
mis à Resource
et Copy to Output Directory
mis à Copy if newer
.
Cela pourrait être aussi simple que ce que je viens de faire plus tôt aujourd'hui. J'ai placé le fichier dans le dossier sans le référencer dans la solution. Cela s'est bien passé lors de la conception.
J'ai eu le même problème.
Maintenant ça marche ...
Essaye ça:
<Button x:Name="b2" HorizontalAlignment="Left" VerticalAlignment="Top"
Width="26" Height="29">
<Button.Background>
<ImageBrush ImageSource=" a.png"/>
</Button.Background>
</Button>
S'il vous plaît vérifier l'image est incluse dans la solution ou non. Si l'image n'est pas incluse, cliquez sur Afficher tous les fichiers de la solution, puis cliquez avec le bouton droit de la souris sur l'image et sélectionnez l'option Inclure dans le projet . Après cela, cela fonctionnera également avec le chemin relatif.
Ex:
"Source ="/Images/Logo/close.png ""
Si vous utilisez des images à partir de DLL, assurez-vous que le projet dll a la configuration de fichier de ressources par défaut dans les propriétés du projet. et remplacez son modificateur d'accès par public . En outre, définissez l'action de génération d'images sur "Ressource".
Vous pouvez simplement utiliser des chemins relatifs aussi:
<Button Name="Button1" Click="Button1_Click">
<Button.Content>
<Image Source="Icons/Button1.png" />
</Button.Content>
</Button>
1- changez les propriétés de l'image du fichier en ressource, {cliquez avec le bouton droit de la souris sur le fichier image -> choisissez Propriétés -> basculer l'action de construction en ressource.
2- utiliser cette balise pour afficher l'image
<Image Source="pack://application:,,,/[Put here the Main Namespace];component/[File path]"/>
exemple
<Image Source="pack://application:,,,/My;component/Resources/switch-off.png"/>
Toutes les très bonnes réponses. Je n'ai pas vu celui-ci ci-dessus et bien que ce soit simple et évident, il provoquera certainement les symptômes du message d'origine. Il est facile d'oublier quand on est pressé.
Assurez-vous que si vous avez fait glisser les images dans le projet, que les fichiers ont été "inclus dans le projet". C'est rapidement disponible dans le menu contextuel.
Si vous tentez certaines des solutions mentionnées ici et que rien ne fonctionne, essayez de nettoyer et de reconstruire votre solution. J'ai juste oublié d'ajouter les images au projet (créer un dossier d'images, cliquer avec le bouton droit de la souris sur le dossier -> ajouter des éléments existants -> cliquer sur l'image).
Cela n'a pas résolu le problème jusqu'à ce que je fasse un nettoyage et une reconstruction.
Ce qui suit a fonctionné pour moi:
• Construire Action = Ressource
• Copier dans le répertoire de sortie = Ne pas copier
xaml:
<Image Source=“Rsources/myPic.png”/>
Où "myPic.png" est l'image dans le dossier "Resources"
Dans mon cas, il me suffisait de suivre deux étapes (Propriétés Windows):
1) Modification de l'action de construction (tous les fichiers de ressources) en "Ressource";
2) Choisir (à nouveau) l'image souhaitée dans le champ Source.