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 busque una fuente RSS y cree una ventana emergente de tostadora cuando haya nuevas fuentes.
La aplicación aún debe tener una ventana principal (esencialmente solo una lista que contiene todas las entradas de feed), pero eso debe estar oculto de forma predeterminada.
He comenzado a leer sobre XAML y WPF y sé que StartupUri en la 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 SysTray 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?
Respuestas:
No hay NotifyIcon para WPF.
Un colega mío usó esta biblioteca de libre acceso con buenos resultados:
fuente
Debe usar el control NotifyIcon de System.Windows.Forms, o también puede usar la API de icono de notificación proporcionada por la API de Windows. WPF no proporciona dicho equivalente, y se ha solicitado en Microsoft Connect varias veces.
Tengo un código en GitHub que usa el
System.Windows.Forms
componente NotifyIcon desde una aplicación WPF, el código se puede ver en https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.csAquí están los bits de resumen:
Cree una ventana WPF con ShowInTaskbar = False, y que se cargue en un estado no visible.
A nivel de clase:
Durante OnInitialize ():
Durante OnLoaded ():
Y para la interacción (se muestra como notifyIcon.Click y DoubleClick arriba):
Desde aquí, puede reanudar el uso de controles WPF y API, como menús contextuales, ventanas emergentes, etc.
Es así de simple. No necesita exactamente una ventana WPF para alojar el componente, es la forma más conveniente de introducir una en una aplicación WPF (ya que una ventana es generalmente el punto de entrada predeterminado definido a través de App.xaml), del mismo modo, usted no ' No necesita un WPF Wrapper o un 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 (sobre el cual se basan todas las versiones actuales y futuras de .NET Framework). Hasta la fecha, no hay ninguna indicación de Microsoft de que la compatibilidad con SWF se eliminará de .NET Framework en el corto plazo.
Espero que ayude.
Es un poco complicado tener que usar un Componente Framework anterior a 3.0 para obtener un icono de bandeja, pero es comprensible que Microsoft lo haya explicado, no existe un concepto de Bandeja del sistema dentro del alcance de WPF. WPF es una tecnología de presentación, y los iconos de notificación son un concepto de sistema operativo (no una "presentación").
fuente
Recientemente tuve este mismo problema. Desafortunadamente, NotifyIcon es solo un control de Windows.Forms en este momento, si desea usarlo, tendrá que incluir esa parte del marco. Supongo que eso depende de lo purista de WPF que seas.
Si desea una forma rápida y fácil de comenzar, eche un vistazo a este control NotifyIcon de WPF en el Proyecto de Código que no depende en absoluto de NotifyIcon de WinForms. Una versión más reciente parece estar disponible en el sitio web del autor y como un paquete NuGet . Esta me parece la mejor y más limpia forma hasta ahora.
Echale un vistazo. También viene con una aplicación de muestra increíble, muy fácil de usar, y puedes tener ventanas emergentes WPF de estilo Windows Live Messenger, información sobre herramientas y menús contextuales. Perfecto para mostrar un feed RSS, lo estoy usando para un propósito similar.
fuente