2010-10-05 19 views
7

¿Hay un comando en WPF para cerrar la aplicación desde el menú contextual? Es decir, ¿el mismo menú contextual que obtienes al hacer clic derecho en la barra de título en cualquier ventana?¿Cómo cerrar la aplicación WPF desde el menú contextual?

Hay un montón de comandos estándar, pero estoy luchando para encontrar un comando de salida .

Respuesta

16

Lamentablemente esto no existe. Tendrá que implementar un comando personalizado y llamar al

Application.Current.Shutdown(); 
+3

Es probablemente Application.Current.Shutdown(); como Application.Current.Exit(); es un evento. – Vitalij

+0

Así es, gracias. – Jeremy

1

Hay una ApplicationCommands.Close, pero no hay una ApplicationCommands.Exit.

Consulte this thread (por ejemplo) para buscar alternativas (como crear un comando personalizado).

1

Su problema está resuelto. Pero el siguiente código puede ayudar a otros.

 
    Environment.Exit(0) 
+0

Creo que se debe usar Application.Current.Shutdown en su lugar. IIRC, Env.Exit es una acción bastante dura comparable a matar el proceso directamente. Pero puedo estar claramente equivocado. Desafortunadamente, no tengo reflector a mano para verificarlo. – quetzalcoatl

+0

Sí Environment.Exit (0) es una forma muy brutal de cerrar su aplicación. Libera todos los recursos de su aplicación y vuelve al entorno del sistema operativo. – Towhid

0

No es que en realidad compleja (pero aún así, M $ chupa por no proporcionar él). Aquí van:

public static class MyCommands 
{ 
    private static readonly ICommand appCloseCmd = new ApplicationCloseCommand(); 
    public static ICommand ApplicationCloseCommand 
    { 
     get { return appCloseCmd; } 
    } 
} 

//=================================================================================================== 
public class ApplicationCloseCommand : ICommand 
{ 
    public event EventHandler CanExecuteChanged 
    { 
     // You may not need a body here at all... 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public bool CanExecute(object parameter) 
    { 
     return Application.Current != null && Application.Current.MainWindow != null; 
    } 

    public void Execute(object parameter) 
    { 
     Application.Current.MainWindow.Close(); 
    } 
} 

Y el cuerpo del manipulador AplicationCloseCommand.CanExecuteChanged evento no puede ser incluso necesario.

Se utiliza este modo:

<MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/> 

Salud!

(No se puede imaginar el tiempo que me llevó a conocer este comando cosas a mí mismo ...)

+1

little trick resharper me dijo: mi cuerpo competir de la clase 'MyCommands':' public static ICommand ApplicationCloseCommand {get; } = new ApplicationCloseCommand(); ' –

+0

@OlleKelderman Sí. Esta es la sintaxis de la versión 6 de C#. Esa respuesta es anterior a ella. :) – NoOne

+0

Lo sé, sigue siendo útil para cualquiera que esté aquí por el motor de búsqueda :) –

Cuestiones relacionadas