2011-04-04 25 views
9

En primer lugar, la información estándar:¿Cómo puedo hacer que mi Menú de contexto WPF desaparezca cuando el usuario hace clic fuera del menú?

VS2010 último
Win7 último x64
WPF aplicación

El FPM menú contextual:

<ContextMenu x:Key="RightClickSystemTray" Placement="MousePoint"> 
     <MenuItem Header="Exit" Click="Menu_Exit"></MenuItem> 
    </ContextMenu> 

El código para mostrarlo:

void _notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) 
     { 
      ContextMenu menu = (ContextMenu)this.FindResource("RightClickSystemTray"); 
      menu.IsOpen = true; 
     } 
    } 

El menú de contexto es un ContextMenu de WPF construido en XAML. El icono de notificación en la bandeja del sistema es un ícono de notificación de formularios (no conozco un ícono de notificación de WPF nativo). Por lo tanto, la propiedad notifyicon.ContextMenu no se utiliza. El código de arriba funciona bien. Cuando el usuario hace clic derecho en el icono de notificación, el menú de contexto se muestra como debería.

El problema que estoy teniendo es hacer que el ContextMenu se vaya cuando yo quiera. Se va bien siempre y cuando haga clic en algún lugar dentro de la aplicación WPF. Este comportamiento es automático. Pero si el usuario hace clic en otra parte, como la barra de tareas, el menú no desaparece. Los eventos "LostFocus" no se activan porque estos tipos de eventos solo se activan cuando un elemento pierde el foco a otro elemento dentro de la misma aplicación. En lo que respecta a la aplicación, el ContextMenu nunca pierde el foco. "Desactivado" fue otro evento que traté de usar. Debo aclarar en este punto que la aplicación tiene una opción "cercana a la bandeja", por lo que la aplicación podría cerrar y activar el evento desactivado antes de que el usuario tenga la oportunidad de hacer clic derecho y mostrar el menú. La aplicación no se reactiva cuando aparece el menú, por lo que la desactivada incluso no se activará cuando haga clic en la barra de tareas.

Así que, finalmente, la pregunta. ¿Cómo puedo hacer que mi menú contextual desaparezca cuando el usuario hace clic fuera de él, incluso si el lugar donde el usuario hace clic no está en la aplicación que creó el menú contextual?

Respuesta

0

No sé si esto es una opción viable, pero si se cambiara a this library usted tendrá una bandeja-icono bien integrados para WPF sin tales problemas (no hay código de ejemplo allí para contextmenus también)

+0

Eso Funcionará bien. Gracias un montón. – John

Cuestiones relacionadas