2011-03-02 26 views
10

AntecedentesCómo crear icono de la bandeja de sistema de WPF cuando no existe una ventana de acogida "principal"

Tenemos una aplicación que se encuentra en el fondo y utiliza FileSystemWatcher para supervisar una carpeta para los archivos nuevos, cuando aparece un nuevo archivo genera una ventana.

Lo que necesito hacer es crear un ícono de bandeja de sistema para esta aplicación para que podamos agregarle elementos de menú de contexto simples (poder cerrar la aplicación sin entrar en el administrador de tareas es el más grande).

Pregunta

Todos los resultados de búsqueda de cómo implementar un punto de icono de la bandeja del sistema para ver ejemplos de cómo agregarlo a una ventana de WPF no la aplicación en sí, ya que mi aplicación no tiene un principal ventana y genera ventanas cuando ocurre un evento ¿cómo puedo implementar esto?

+0

posible duplicado de [Aplicación WPF que sólo tiene un icono de la bandeja] (http://stackoverflow.com/questions/1472633/wpf-application-that-only-has-a-tray-icon) – svick

+2

Revisa esta publicación http://stackoverflow.com/questions/1472633/wpf-application-that-only-has-a-tray-icon –

Respuesta

10

Establezca la aplicación ShutdownMode en OnExplicitShutdown y muestre el icono de la bandeja en Application.OnStartup. Este ejemplo utiliza NotifyIcon desde WinForms, por lo tanto, agregue una referencia a System.Windows.Forms.dll y System.Drawing.dll. Además, agregue un recurso incrustado para el icono de la bandeja.

App.xaml

<Application x:Class="WpfTrayIcon.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      ShutdownMode="OnExplicitShutdown" 
      > 
    <Application.Resources> 

    </Application.Resources> 
</Application> 

App.xaml.cs

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Windows; 

using NotifyIcon = System.Windows.Forms.NotifyIcon; 

namespace WpfTrayIcon 
{ 
    public partial class App : Application 
    { 
     public static NotifyIcon icon; 

     protected override void OnStartup(StartupEventArgs e) 
     { 
      App.icon = new NotifyIcon(); 
      icon.Click += new EventHandler(icon_Click); 
      icon.Icon = new System.Drawing.Icon(typeof(App), "TrayIcon.ico"); 
      icon.Visible = true; 

      base.OnStartup(e); 
     } 

     private void icon_Click(Object sender, EventArgs e) 
     { 
      MessageBox.Show("Thanks for clicking me"); 
     } 
    } 
} 
+0

If el icono se agrega a través de Recursos en las propiedades del proyecto, existe esta pequeña diferencia: 'icon.Icon = MyApp.Properties.Resources.TrayIcon;' – retroj

Cuestiones relacionadas