web-dev-qa-db-fra.com

Image dans le bouton WPF non visible à l'exécution

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:

  1. Les images de contrôle WPF ne sont pas affichées lorsqu'elles sont utilisées par une application

  2. problème d'image dans wpf (l'image ne s'affiche pas)

  3. Image d’arrière-plan du bouton non affiché dans WPF

Comment faire en sorte que l'image du bouton apparaisse au moment de l'exécution?

49
MoonKnight

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

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
28
Basti

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.

7
Darien Pardinas

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!

7
Felix D.

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.

2

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.

1
Deepak

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"/>
1
Mari

Source = "fichier: /// D: /100x100.jpg" /> fonctionne pour moi.

0
Neo