67 votes

Comment utiliser une icône représentant une ressource dans WPF?

J'ai un fichier .ico intégré en tant que ressource (action de construction 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
 

102voto

user13125 Points 574

Votre fichier d'icône doit être ajouté à l'un des assemblys de votre projet et son action de construction 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 );
 

20voto

Thomas Bratt Points 10738

Un modèle d'utilisation courant consiste à avoir l'icône de notification identique à celle de la fenêtre principale. L'icône est définie comme un 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:

 <Window x:Class="MyNamespace.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:Seahorse"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="600"
Icon="images\MyImage.png">
 

12voto

Jaykul Points 6484

Eh bien, vous ne voulez pas utiliser le resx ressources de style: il vous suffit de coller le fichier ico dans votre projet dans un dossier (permet de dire que "l'oeuvre") et dans les propriétés, définissez l'Action de génération de "Ressources" ...

Vous pouvez y faire référence dans le code XAML PACK Uri ... "pack://application:,,,/Illustration/Avertir.ico"

Voir ici: http://msdn.microsoft.com/en-us/library/aa970069.aspx et l' échantillon

Si vous voulez être un peu plus ... WPF, vous devriez regarder dans le WPF Contrib projet sur CodePlex qui a un NotifyIcon de contrôle que vous pouvez créer dans le XAML et qui utilise la norme de WPF menus (de sorte que vous pouvez coller "n'importe quoi" dans le menu).

2voto

blackSphere Points 58

J'ai créé un projet ici et utilisé une ressource intégrée (l'action de génération a été définie sur Ressource intégrée, plutôt que sur une ressource). Cette solution ne fonctionne pas avec Resource, mais vous pourrez peut-être la manipuler. Je mets ceci sur OnIntialized () mais il n’est pas obligé 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;
    }
 

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