Aplicación WPF que solo tiene un icono de bandeja


Soy un novato total de WPF y me pregunto si alguien podría darme algunos consejos sobre cómo escribir una aplicación que comienza minimizada en la bandeja. La idea es que periódicamente obtiene un Feed RSS y crea una Tostadora-Popup cuando hay nuevos feeds.

La Aplicación aún debe tener una Ventana Principal (esencialmente solo una lista que contenga todas las entradas del feed), pero eso debe estar oculto por defecto.

He empezado a leer sobre XAML y WPF y sé que el StartupUri en el App.xaml tiene que apuntar a mi ventana principal, pero no tengo idea de cuál es la forma correcta de hacer el icono de la bandeja del sistema y ocultar la ventana principal (esto también significa que cuando el usuario minimiza la ventana, debe minimizar a la bandeja, no a la barra de tareas).

Alguna pista?

Author: Michael Stum, 2009-09-24

3 answers

 100
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-20 09:21:51

Tienes que usar el control NotifyIcon desde el Sistema.Windows.o, alternativamente, puede usar la API Notify Icon proporcionada por la API de Windows. WPF no proporciona tal equivalente, y se ha solicitado en Microsoft Connect varias veces.

Tengo código en GitHub que usa el componente System.Windows.Forms NotifyIcon desde una aplicación WPF, el código se puede ver en https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs

Aquí está el resumen bits:

Cree una ventana WPF con ShowInTaskbar=False, y que se cargue en un Estado no Visible.

A nivel de clase:

private System.Windows.Forms.NotifyIcon notifyIcon = null;

Durante OnInitialize ():

notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];

Durante OnLoaded ():

notifyIcon.Visible = true;

Y para la interacción (mostrado como NotifyIcon.Haga clic y haga doble clic arriba):

void notifyIcon_Click(object sender, EventArgs e)
{
    ShowQuickLaunchMenu();
}

Desde aquí puede reanudar el uso de controles WPF y API como menús contextuales, ventanas emergentes, etc.

Es así de simple. No necesitas exactamente una ventana WPF para alojar el componente, es solo la forma más conveniente de introducir uno en una aplicación WPF (como una ventana es generalmente el punto de entrada predeterminado definido a través de la aplicación.xaml), del mismo modo, no necesita un WPF Wrapper o control de terceros, ya que el componente SWF está garantizado en cualquier instalación de.NET Framework que también tenga soporte WPF ya que es parte de. NET Framework (que todas las versiones actuales y futuras de. NET Framework se basan en.) Hasta la fecha, no hay ninguna indicación de Microsoft que el soporte SWF será eliminado de. NET Framework en breve.

Espero que eso ayude.

Es un poco queso que usted tiene que utilizar un componente de Marco pre-3.0 para obtener un icono de bandeja, pero comprensiblemente como Microsoft lo ha explicado, no hay concepto de una Bandeja del sistema dentro del ámbito de WPF. WPF es una tecnología de presentación, y los Iconos de notificación son un Sistema Operativo (no un concepto de "Presentación").

 82
Author: Shaun Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-11 20:06:39

Recientemente tuve este mismo problema. Desafortunadamente, NotifyIcon es solo un Windows.Control de formularios en este momento, si quieres usarlo vas a tener que incluir esa parte del framework. Supongo que eso depende de lo purista que seas de WPF.

Si quieres una forma rápida y fácil de empezar echa un vistazo a estoWPF NotifyIcon controla en el Proyecto de Código que no se basa en el NotifyIcon de WinForms en absoluto. Una versión más reciente parece estar disponible en el sitio web del autor y como un paquete NuGet. Esto me parece la mejor y más limpia manera hasta ahora.

  • Información sobre herramientas enriquecida en lugar de texto
  • Menús contextuales y ventanas emergentes de WPF
  • Soporte de comandos y eventos enrutados
  • Enlace flexible de datos
  • Mensajes de globo enriquecidos en lugar de los mensajes predeterminados OS

Compruébalo. Viene con una aplicación de muestra increíble también, muy fácil de use, y puede tener ventanas emergentes WPF de estilo Windows Live Messenger, información sobre herramientas y menús contextuales de gran apariencia. Perfecto para mostrar una fuente RSS, lo estoy usando para un propósito similar.

 47
Author: Dale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-22 14:33:45