Question

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 référencer mon icône?

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

La solution

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 );

Autres conseils

L’utilisation habituelle des icônes de notification est 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">

Eh bien, vous ne souhaitez pas utiliser les ressources de style resx: vous collez simplement le fichier ico de votre projet dans un dossier (disons "ArtWork") et dans les propriétés, définissez l'action de génération sur "Ressources". ; ...

Vous pouvez ensuite le référencer en XAML à l'aide d'URIs PACK ... "pack: // application: ,,, / Artwork / Notify.ico"

Voir ici: http://msdn.microsoft.com/fr -us / library / aa970069.aspx et le exemple

Si vous voulez être un peu plus ... semblable à WPF, vous devriez regarder dans le WPF Contrib sur CodePlex qui comporte un contrôle NotifyIcon que vous pouvez créer en XAML et qui utilise les menus standard WPF (pour que vous puissiez coller" n'importe quoi "dans le menu).

Si vous cherchez simplement une réponse simple, je pense que c'est ici que MyApp est le nom de votre application et qu'il s'agit du nom de l'espace de nom racine de votre application. Vous devez utiliser la syntaxe d'URI du pack, mais il n'est pas nécessaire que ce soit compliqué pour extraire une icône de vos ressources incorporées.

    <Window x:Class="MyApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Height="100"
    Width="200"
    Icon="pack://application:,,,/MyApp;component/Resources/small_icon.ico">

J'ai créé un projet ici et utilisé une ressource incorporée (l'action de génération a été définie sur Ressource incorporé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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top