347 votes

Définissez la source d’image WPF dans le code

Je suis en train de définir la source de l’image d’un WPF dans le code. L’image est incorporé comme une ressource dans le projet. En regardant les exemples, je suis venu avec le code ci-dessous. Pour une raison quelconque, qu'il ne fonctionne pas - l’image ne s’affiche pas.

Par le débogage je peux voir que le flux de données contienne les données d’image. Alors quel est le problème ?

L’icône désigne quelque chose comme ceci :``

442voto

Jared Harley Points 4729

Après avoir eu le même problème que vous et faire un peu de lecture, j'ai découvert la solution - Pack Uri.

Je n'ai la suite dans le code:

Image finalImage = new Image();
finalImage.Width = 80;
...
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png");
logo.EndInit();
...
finalImage.Source = logo;

L'URI est scindée en deux parties:

  • Autorité: application:///
  • Chemin d'accès: Le nom d'un fichier de ressources qui est compilé dans un assemblage. Le chemin d'accès doit respecter le format suivant: AssemblyShortName[;Version][;PublicKey];component/Path

    • AssemblyShortName: le nom court de l'assembly référencé.
    • ;Version [facultatif]: la version de l'assembly référencé qui contient le fichier de ressources. Il est utilisé lorsque deux ou plusieurs assemblys référencés avec le même nom abrégé sont chargés.
    • ;PublicKey [facultatif]: la clé publique qui a été utilisé pour signer l'assembly référencé. Il est utilisé lorsque deux ou plusieurs assemblys référencés avec le même nom abrégé sont chargés.
    • composante: spécifie que l'assemblée visée à l'est référencé à partir de l'assemblée locale.
    • /Chemin d'accès: le nom du fichier de ressources, y compris de son chemin relatif à la racine de l'assembly référencé du dossier de projet.

Les trois barres obliques après application: sont remplacées par des virgules:

Remarque: L'autorité de la composante d'un pack de URI est un intégré à l'URI qui pointe vers un colis et doivent être conformes à la RFC 2396. En outre, le caractère "/" doit être remplacé par le "," le caractère, et les caractères réservés tels que "%" et "?" doit être échappé. Voir le CPVP pour plus de détails.

Et bien sûr, assurez-vous de définir l'action de construire sur votre image pour l' Resource.

185voto

Simon Points 11945
<pre><code></code><p>Ceci chargera une image appelée « Untitled.png » dans un dossier appelé « Images » avec son « Build Action » « Ressource » la valeur dans un assembly appelé « WpfApplication1 ».</p></pre>

77voto

Alex B Points 973

C’est un peu moins de code et peut être fait en une seule ligne.

48voto

A Bothe Points 141

Très facile :

Pour définir image un élément de menu dynamiquement, seulement procédez comme suit :

MyMenuItem.ImageSource = new BitmapImage (nouvelle Uri("Resource/icon.ico",UriKind.Relative)) ;

.. .attendu « icon.ico » peuvent être trouvées partout (actuellement, il est situé dans le répertoire « Resources ») et doit être lié comme ressource... c’est tout  :-D

16voto

Payson Welch Points 664

Vous pouvez également réduire cela à une seule ligne. C’est le code que j’ai utilisé pour définir l’icône de ma fenêtre principale. Il suppose que le fichier .ico est marqué comme étant du contenu et est copié dans le répertoire de sortie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X