2009-08-17 24 views
17

Estoy creando un menú estándar en mi aplicación WPF.Comandos estándar de WPF - ¿Dónde está la salida?

Sé que puedo crear comandos personalizados, pero sé que también hay un montón de comandos estándar para enlazar.

Por ejemplo, para abrir un archivo que debería unirse a ApplicationCommands.Open, para cerrar un archivo que debería unirse a ApplicationCommands.Close. También hay una gran cantidad de EditCommands, ComponentCommands o NavigationCommands.

No parece haber un comando "Salir". Hubiera esperado que hubiera ApplicationCommands.Exit.

¿Qué debo vincular a la opción de menú "Salir"? Para crear un comando personalizado para algo, este genérico parece incorrecto.

Respuesta

4

yo sepa no hay ApplicationCommands.Quit o ApplicationCommands.Exit, así que supongo que vas a tener que crear usted mismo ...

De todos modos, si usted está utilizando la MVVM pattern, RoutedCommands no son exactamente útil, entonces es mejor usar una alternativa liviana como RelayCommand o DelegateCommand.

0

Puede modificar la propiedad Text de un comando antes de vincularlo en una ventana. Esto cambiará el texto del comando donde aparezca en tu interfaz de usuario.

EDIT: Haz esto para cerrar la ventana o aplicación ctor

6

No es tan complejo en realidad (pero aún así, M $ apesta por no proporcionarlo). 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 ...)

0
private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     Application.Current.Shutdown(); 
    } 
+0

Sería preferible si se ha añadido una explicación a su código ... – JTG

Cuestiones relacionadas