Comment utiliser une icône qui est une ressource dans WPF?

J’ai un fichier .ico incorporé en tant que ressource (action de génération définie sur ressource). J’essaie de créer un NotifyIcon. Comment puis-je référencer mon icône?

notifyIcon = new NotifyIcon(); notifyIcon.Icon = ?? // my icon file is called MyIcon.ico and is embedded 

Votre fichier d’icône doit être ajouté à l’un de vos assemblys de projet et son action de génération doit être définie sur Ressource. Après avoir ajouté une référence à l’assembly, vous pouvez créer un NotifyIcon comme ceci:

 System.Windows.Forms.NotifyIcon icon = new System.Windows.Forms.NotifyIcon(); Stream iconStream = Application.GetResourceStream( new Uri( "pack://application:,,,/YourReferencedAssembly;component/YourPossibleSubFolder/YourResourceFile.ico" )).Stream; icon.Icon = new System.Drawing.Icon( iconStream ); 

Un modèle d’utilisation courant consiste à faire en sorte que l’icône de notification soit identique à l’icône de la fenêtre principale. L’icône est définie en tant que fichier PNG.

Pour ce faire, ajoutez l’image aux ressources du projet, puis utilisez-la comme suit:

 var iconHandle = MyNamespace.Properties.Resources.MyImage.GetHicon(); this.notifyIcon.Icon = System.Drawing.Icon.FromHandle(iconHandle); 

Dans la fenêtre XAML:

  

Eh bien, vous ne voulez pas utiliser les ressources de style resx: vous placez simplement le fichier ico dans votre projet dans un dossier (disons “ArtWork”) et dans les propriétés, définissez l’action Build sur “Resources” …

Ensuite, vous pouvez le référencer dans XAML en utilisant les URI PACK … “pack: // application: ,,, / Artwork / Notify.ico”

Voir ici: http://msdn.microsoft.com/en-us/library/aa970069.aspx et l’ exemple

Si vous voulez être un peu plus … comme WPF, vous devriez regarder dans le projet WPF Consortingb sur CodePlex qui a un contrôle NotifyIcon que vous pouvez créer dans XAML et qui utilise des menus WPF standard (pour que vous puissiez coller n’importe quoi “dans le menu).

J’ai créé un projet ici et utilisé une ressource incorporée (l’action de construction a été définie sur Embedded Resource, plutôt que sur une simple ressource). Cette solution ne fonctionne pas avec Resource, mais vous pouvez le manipuler. Je mets ça sur le OnIntialized () mais ça n’a pas besoin d’y aller.

 //IconTest = namespace; exclamic.ico = resource System.IO.Stream stream = this.GetType().Assembly.GetManifestResourceStream("IconTest.Resources.exclamic.ico"); if (stream != null) { //Decode the icon from the stream and set the first frame to the BitmapSource BitmapDecoder decoder = IconBitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.None); BitmapSource source = decoder.Frames[0]; //set the source of your image image.Source = source; } 

Si vous cherchez simplement la réponse simple, je pense que c’est là que MyApp est le nom de votre application et que c’est le nom de l’espace racine de votre application. Vous devez utiliser la syntaxe URI du pack, mais cela ne doit pas être compliqué pour extraire une icône de vos ressources incorporées.