2009-08-17 122 views
17

我在我的WPF應用程序中創建了一個標準菜單。WPF標準命令 - 退出哪裏?

我知道我可以創建自定義命令,但我知道還有一堆標準命令綁定到。

例如,打開我應該結合 ApplicationCommands.Open文件,收我應該綁定到文件ApplicationCommands.Close。還有大量的 EditCommands, ComponentCommands NavigationCommands

似乎沒有「退出」命令。我預料會有 ApplicationCommands.Exit

我該怎麼綁定到「退出」菜單項?爲這個泛型創建一個自定義命令似乎是錯誤的。

回答

4

AFAIK沒有ApplicationCommands.Quit或ApplicationCommands.Exit,所以我想你會需要自己創建它...

無論如何,如果你正在使用MVVM pattern,RoutedCommands並不完全得心應手,所以最好使用像RelayCommandDelegateCommand這樣的輕量級替代品。

0

在綁定到窗口之前,您可以修改命令的Text屬性。這將改變它在你的用戶界面中出現的命令文本。

編輯:這樣做是爲了在窗口或應用程序關閉男星

6

實際上並不那麼複雜(但仍然是因爲不提供它而導致M $糟糕)。這裏你去:

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

而事件處理程序的主體可能不是甚至需要。

您可以使用它,像這樣:

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

乾杯!

(你無法想象花了多長時間我發現這個命令的東西我自己......)

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

,如果你增加了一個解釋,你的代碼將優選... – JTG 2015-01-11 23:09:58