Domanda

Ho un file .ico incorporato come risorsa (azione di creazione impostata su risorsa).Sto cercando di creare un NotifyIcon.Come posso fare riferimento alla mia icona?

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

Soluzione

Il file dell'icona dovrebbe essere aggiunto a uno degli assembly del progetto e la sua azione di creazione dovrebbe essere impostata su Risorsa.Dopo aver aggiunto un riferimento all'assembly, puoi creare un NotifyIcon come questo:

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

Altri suggerimenti

Un modello di utilizzo comune prevede che l'icona di notifica sia uguale all'icona della finestra principale.L'icona è definita come file PNG.

Per fare ciò, aggiungi l'immagine alle risorse del progetto e quindi utilizza come segue:

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

Nella finestra 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">

Bene, non vuoi utilizzare le risorse in stile resx:basta inserire il file ico nel tuo progetto in una cartella (diciamo "ArtWork") e nelle proprietà, impostare l'azione di creazione su "Risorse" ...

Quindi puoi fare riferimento ad esso in XAML utilizzando gli URI PACK..."pack://applicazione:,,,/Artwork/Notify.ico"

Vedere qui: http://msdn.microsoft.com/en-us/library/aa970069.aspx e il campione

Se vuoi essere un po' di più...Come WPF, dovresti esaminare il file Contributo WPF progetto su CodePlex che ha un controllo NotifyIcon che puoi creare in XAML e che utilizza menu WPF standard (in modo da poter inserire "qualsiasi cosa" nel menu).

Se stai solo cercando la risposta semplice, penso che sia qui dove MyApp è il nome della tua applicazione e dove quello è il nome dello spazio dei nomi root per la tua applicazione.Devi utilizzare la sintassi dell'URI del pacchetto, ma non deve essere così complicato estrarre un'icona dalle risorse incorporate.

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

Ho creato un progetto qui e ho utilizzato una risorsa incorporata (l'azione di compilazione è stata impostata su Risorsa incorporata, anziché solo su risorsa).Questa soluzione non funziona con Resource, ma potresti essere in grado di manipolarla.L'ho inserito su OnIntialized() ma non deve andare lì.

//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;
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top