Dans tous les cas, voici le démarrage d’une petite application qui vérifie la cohérence des crochets incorporés dans les fichiers .resx (afin que les erreurs d’exécution des chaînes "... {0}" ne correspondant pas ne se produisent pas). J'ai le code XAML suivant pour MainWindow.xaml et mon problème particulier est lié à l'image à afficher sur le bouton.
<Window x:Class="ResxChecker.MainWindow"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="174.383" Width="495.869">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="350*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="30*"/>
</Grid.RowDefinitions>
<Label Content="Select .resx file:" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="24" Width="Auto" Grid.ColumnSpan="1"/>
<TextBox Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="10,0,0,0" Grid.Row="1" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
<Button Grid.Column="2" HorizontalAlignment="Right" Margin="5,0,10,0" Grid.Row="1">
<Image VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="16 " Width="16" Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"/>
</Button>
</Grid>
</Window>
L'image a 'Construire Action = Ressource', 'Copier dans le répertoire de sortie = Ne pas copier' - l'image est affichée dans le concepteur mais pas au moment de l'exécution. J'ai vu les questions suivantes et lu les réponses pertinentes, mais aucune ne résout le problème:
Comment faire en sorte que l'image du bouton apparaisse au moment de l'exécution?
Changez l'action de construction en 'Ressource'. De plus, votre URL de pack est fausse. Soit utiliser:
Source="pack://application:,,,/Resource/UserCost2013Open16.png"
ou simplement
Source="/Resource/UserCost2013Open16.png"
Il y a 2 solutions:
1: Modifiez les paramètres de l'image:
Build Action = Content
Copy to output directory = Copy if newer
Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"
2: Lors de l'utilisation de application au lieu de siteoforigin) == dans le chemin source, vous devez envisager plusieurs manières :
a) L'image sera dans un sous-dossier appelé "Ressources" et le fichier .exe sera petit
Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Content
Copy to output directory = Copy if newer
b) L'image sera incluse dans le fichier .exe et aucun sous-dossier avec imagefile n'existe
Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Resource
Copy to output directory = Copy if newer
Dans mon cas, j'avais les images dans un projet séparé nommé Common
et les images se trouvaient dans un dossier nommé Resources
dans ce projet. Dans mon autre projet, j'ai ajouté une référence à Common
et défini la source des images comme suit:
<Image Source="/Common;component/Resources/anImage.png"/>
Les images ont le Build Action
réglé sur Resource
et Copy to Output Directory
à Do not copy
. Cependant, pour une raison étrange, cela ne fonctionnait pas tant que je n'ai pas supprimé tous les fichiers d'assembly de ma solution et créé un Clean Solution
et Build Solution
. Je ne sais pas pourquoi, mais tout a commencé à fonctionner à l'exécution une fois que j'ai tout reconstruit. Je n'arrive toujours pas à comprendre pourquoi cela fonctionnait au moment de la conception.
En supposant que vous avez
réglez votre Build Action
sur Resource
définir ce chemin correctement en utilisant URI-PACK-FORMAT
Dans mon cas, ça ne paraissait toujours pas.
Clean & Rebuild
PAS simplement Build l'a corrigé pour moi!
Vous devez ajouter quelque chose à l'intérieur de Explorateur de solutions de Visual Studio. Au lieu de simplement copier l'image dans un dossier dans l'Explorateur Windows, appuyez sur un clic droit sur n'importe quel dossier dans l'Explorateur de solutions, accédez à Ajouter> Élément existant ... et sélectionnez le chemin d'accès à votre ressource.
Allez à votre image présente dans le dossier des ressources, faites un clic droit sur l'image, allez dans les propriétés. Cliquez sur la propriété BuildAction et définissez-la sur Ressource parmi aucune. Ça va marcher.
J'ai défini mon image comme suit:
<Image Source="/Resources/Images/icon.png"/>
L'image est affichée dans Visual Studio designer, mais aucune image ne s'affiche lorsque j'ai lancé l'application! Cela m'a rendu fou! J'ai essayé tout Build Action s avec clean/build, pas de chance.
Dans mon cas, le problème est dû au fait que le contrôle (qui utilise Image) et l'application elle-même sont dans des projets différents. Le dossier Ressources/Images se trouve dans le projet Controls. En conséquence, l’application a tenté de rechercher icon.png dans son propre dossier Debug, mais c’est en réalité dans le dossier Controls 'Debug.
Donc, deux solutions fonctionnent pour moi:
1) mettre Ressources/Images dans le projet de l'application (pas si bon quand il y a plusieurs projets qui utilisent des contrôles de Controls projet, mais ça marche)
2) spécifiez le nom du projet Controls explicitement à l'intérieur de Image:
<Image Source="/Controls;component/Resources/Images/icon.png"/>
Source = "fichier: /// D: /100x100.jpg" /> fonctionne pour moi.