2009-08-17 11 views
17

Tworzę standardowe menu w mojej aplikacji WPF.Standardowe komendy WPF - gdzie jest wyjście?

Wiem, że mogę tworzyć niestandardowe polecenia, ale wiem, że istnieje również grupa standardowych poleceń, do których można się połączyć.

Na przykład, aby otworzyć plik powinien wiązać się ApplicationCommands.Open, aby zamknąć plik powinien wiązać się ApplicationCommands.Close. Istnieje również duża liczba komend EditCommands, ComponentCommands lub NavigationCommands.

Wygląda na to, że nie ma polecenia "Exit". Spodziewałbym się, że będzie ApplicationCommands.Exit.

Co należy powiązać z elementem menu "Wyjście"? Aby utworzyć niestandardowe polecenie dla czegoś, co generyczne wydaje się po prostu błędne.

Odpowiedz

4

AFAIK nie ma ApplicationCommands.Quit lub ApplicationCommands.Exit, więc myślę, że będziesz musiał go stworzyć samemu ...

W każdym razie, jeśli używasz MVVM pattern, RoutedCommands nie są dokładnie pod ręką, więc lepiej użyć lekkiej alternatywy, takiej jak RelayCommand lub DelegateCommand.

0

Możesz modyfikować właściwość Tekst polecenia przed powiązaniem go w oknie. Spowoduje to zmianę tekstu polecenia wszędzie, gdzie pojawi się w twoim interfejsie użytkownika.

EDIT: Czy to aby go zamknąć w oknie lub App konstruktor

6

Właściwie to nie jest tak skomplikowane (ale nadal M $ jest do bani, że go nie dostarczyłem). Proszę bardzo:

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(); 
    } 
} 

i ciało obsługi AplicationCloseCommand.CanExecuteChanged zdarzenia nie mogą być jeszcze potrzebne.

go używać tak:

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

Cheers!

(Nie można sobie wyobrazić, jak długo zajęło mi, aby odkryć te rzeczy polecenia siebie ...)

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

byłoby korzystne jeśli dodano wyjaśnienia do kodu ... – JTG

Powiązane problemy