je le ci-dessous XAML simples:Problème d'afficher une image locale de XAML
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Image Source="happyface.jpg"/>
</Grid>
</Window>
happyface.jpg est inclus dans le projet et son action de construction est réglé sur « contenu » et Copier vers Ouptput Directory est réglé sur "Toujours copier".
Lorsque vous regardez l'application via le concepteur VS, tout est ok et je vois l'image. Cependant, lorsque je lance l'application, aucune image n'est affichée. Je vois que l'image est copiée dans le répertoire out out. Si je mets dans le chemin entier comme la source (C: \ SANDBOX \ WpfApplication1 \ WpfApplication1 \ bin \ Debug ") cela fonctionne
Des idées pour que l'image ne soit pas affichée quand je cours l'application? . a propos de pack URIs mais je pensais que juste référence simplement une image lâche dans le répertoire courant, je peux utiliser le nom de l'image
Merci
Edit:.
L'image à ajouter est dans le dossier: C: \ WPF en C# \ SANDBOX \ WpfApplication1 \ WpfApplication1
Le chemin du fichier image dans VS: C: \ WPF en C# \ SANDBOX \ WpfApplication1 \ WpfApplication1 \ happyface.jpg
I a créé le projet par VS, la définition du répertoire de solution à "C: \ WPF en C# \ Sandbox" et a quitté le projet par défaut et le nom de la solution de WpfApplication1. Je également coché la case "Créer un répertoire pour la solution" donc je maintenant la structure dir suivante:
C: \ WPF en C# \ SANDBOX \ WpfApplication1 - contient le fichier WpfApplication1.sln
C : \ WPF en C# \ SANDBOX \ WpfApplication1 \ WpfApplication1 - contient WpfApplication1.csproj
le jpeg est dans le même répertoire que WpfApplication1.csproj et a été ajouté au projet à partir de là. Lorsque la solution est créée, le répertoire de sortie est C: \ WPF dans C# \ SANDBOX \ WpfApplication1 \ WpfApplication1 \ bin \ Debug et l'image est copiée dans ce répertoire.
Edit # 2
J'ai essayé de déplacer mon application à ma machine 32 bits et tout fonctionne comme prévu. L'image est affichée normalement. Quand je l'ai compilé sur mon x64, j'ai changé la config cible de la plate-forme dans le projet à "x86". Je suis surpris que le problème se produit uniquement lors de l'exécution sur une machine 64 bits (XP 64). Des idées pour lesquelles cela pourrait être le cas?
Edit # 3 - Je pense que je trouve la question
J'activé le suivi de regarder de plus près ce qui se passe. Juste pour m'assurer que je ne faisais rien de fou, j'ai recommencé à zéro, ne changeant rien du projet VS 2008 par défaut qui est créé pour moi en plus d'ajouter l'image comme contenu et de permettre le traçage.
J'ai respecté l'application sur ma machine x64 et l'ai exécutée. Le ci-dessous est ce que j'ai obtenu w.r.t. le contrôle de l'image:
System.Windows.Markup Start: 13 : Set property value; Object='System.Windows.Controls.Image'; Object.HashCode='18796293'; Object.Type='System.Windows.Controls.Image'; PropertyName='Name'; Value='_imageControl'
System.Windows.Markup Stop: 13 : Set property value; Object='System.Windows.Controls.Image'; Object.HashCode='18796293'; Object.Type='System.Windows.Controls.Image'; PropertyName='Name'; Value='_imageControl'
System.Windows.RoutedEvent Start: 1 : Raise RoutedEvent; RoutedEvent='Image.ImageFailed'; RoutedEvent.HashCode='12289376'; RoutedEvent.Type='System.Windows.RoutedEvent'; Element='System.Windows.Controls.Image'; Element.HashCode='18796293'; Element.Type='System.Windows.Controls.Image'; RoutedEventArgs='System.Windows.ExceptionRoutedEventArgs'; RoutedEventArgs.HashCode='43495525'; RoutedEventArgs.Type='System.Windows.ExceptionRoutedEventArgs'; Handled='False'
System.Windows.RoutedEvent Stop: 1 : Raise RoutedEvent; RoutedEvent='Image.ImageFailed'; RoutedEvent.HashCode='12289376'; RoutedEvent.Type='System.Windows.RoutedEvent'; Element='System.Windows.Controls.Image'; Element.HashCode='18796293'; Element.Type='System.Windows.Controls.Image'; RoutedEventArgs='System.Windows.ExceptionRoutedEventArgs'; RoutedEventArgs.HashCode='43495525'; RoutedEventArgs.Type='System.Windows.ExceptionRoutedEventArgs'; Handled='False'
System.Windows.Markup Start: 16 : Type conversion failed, using fallback; TypeConverter='System.Windows.Media.ImageSourceConverter'; TypeConverter.HashCode='55915408'; TypeConverter.Type='System.Windows.Media.ImageSourceConverter'; String='happyface.jpg'; Value='<null>'
Comme on le voit, la conversion d'image a échoué parce que la valeur du fichier JPG était en quelque sorte nulle.
J'ai copié l'application directement dans le dossier Desktop de mon ordinateur x86 et je l'ai simplement exécuté. Ici, il a travaillé et nous pouvons voir la différence dans la trace:
System.Windows.Markup Start: 13 : Set property value; Object='System.Windows.Controls.Image'; Object.HashCode='18796293'; Object.Type='System.Windows.Controls.Image'; PropertyName='Name'; Value='_imageControl'
System.Windows.Markup Stop: 13 : Set property value; Object='System.Windows.Controls.Image'; Object.HashCode='18796293'; Object.Type='System.Windows.Controls.Image'; PropertyName='Name'; Value='_imageControl'
System.Windows.Markup Start: 15 : Converted value; TypeConverter='System.Windows.Media.ImageSourceConverter'; TypeConverter.HashCode='12289376'; TypeConverter.Type='System.Windows.Media.ImageSourceConverter'; String='happyface.jpg'; Value='pack://application:,,,/ImageContentTest;component/happyface.jpg'; Value.HashCode='43495525'; Value.Type='System.Windows.Media.Imaging.BitmapFrameDecode'
D'une certaine manière, sur la machine x86, la valeur est correctement réglé sur « pack: // application: ,,,/ImageContentTest; composant/happyface.jpg ';
J'avais l'application sur mon dossier de bureau de x64 de déplacer plus tôt et juste pour des coups de pied courus à partir de là. À ma grande surprise, ça a marché! Il s'avère que le # dans le chemin du dossier était le coupable. Avec le # là, ça ne marchera pas. Avec le # retiré, cela fonctionne normalement. Cela n'a rien à voir avec x64 vs x86.
Je ne suis toujours pas sûr exactement pourquoi le # provoquerait un tel comportement. Je m'attendrais au moins à ce qu'un type d'erreur apparaisse indiquant un mauvais chemin ou quelque chose. En tout cas, je suppose que j'éviterai les # dans les chemins à partir de maintenant :)
Merci à tous ceux qui ont regardé ça avec moi.
Je ne vois pas de problème où il ne se charge pas. Êtes-vous en cours d'exécution sandboxed? y a-t-il quelque chose dans le codebehind? – VoodooChild
Aussi pourquoi est-il appelé "WpfApplication1.Window1"? ne devrait-il pas être
VoodooChild
Le code derrière est vide à l'exception de InitializeComponent(). Tout ce que je fais est de créer un nouveau projet à partir de VS, qui utilise par défaut l'espace de noms WpfApplication1 et crée Window1.Les seuls changements que j'ai faits ont été d'ajouter l'image dans le projet en tant que contenu et de modifier le xaml comme ci-dessus. Je l'ai juste exécuté de VS mais l'image n'est pas montrée. – Flack