web-dev-qa-db-fra.com

L'image apparaît dans le concepteur Visual Studio, mais pas pendant l'exécution

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:

  • Dossier racine
    • Images
      • Les icônes
    • Projet 1
    • Projet 2
    • Projet 3

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>
25
d.moncada

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.

SiteOfOrigin:

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

13
H.B.

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:

  1. Assurez-vous que les propriétés de l'image dans le projet ont "Build Action" = "Ressource", PAS "Ressource incorporée"
  2. Dans le xaml, avec la balise image sélectionnée, utilisez les fenêtres de propriétés pour sélectionner la liste déroulante Source puisque NOW apparaît dans la liste déroulante! Cela laisse Visual Studio formater la chaîne pour moi. 

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

41
Markb

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.

38
Amine Da.

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:

  1. sélectionnez toutes les images dans les ressources de votre solution Explorer. 
  2. Faites un clic droit et allez dans les propriétés. 
  3. Action de construction sur "ressource intégrée"
  4. Copier vers sortie dans "Copier toujours"
  5. enregistrer et construire la solution. 
  6. ajouter une image et prendre soin ou la valeur ZIndex. 
  7. 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"
    
3
Mohamed Hussein

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.

3
Dirk Bester

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.

1
Mark Bonafe

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>
1
Santhakumar

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

1
Chetan Verve

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

1
Joish

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
MyKuLLSKI

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"/>
0
AbuDawood

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.

0
Alan

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.

0
trueCamelType

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"

0
Nehorai

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.

0
DiogoA.
  1. Il suffit de glisser/déposer le dossier "Icônes" dans votre projet "Images".
  2. Utilisez le chemin relatif: Image Source = "Icons/Button1.png".
0
Ted