class Commands
{
static Command
{
CloseWindow = NewCommand("Close Window", "CloseWindow", new KeyGesture(Key.Escape));
CloseWindowDefaultBinding = new CommandBinding(CloseWindow,
CloseWindowExecute, CloseWindowCanExecute);
}
public static CommandBinding CloseWindowDefaultBinding { get; private set; }
public static RoutedUICommand CloseWindow { get; private set; }
static void CloseWindowCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = sender != null && sender is System.Windows.Window;
e.Handled = true;
}
static void CloseWindowExecute(object sender, ExecutedRoutedEventArgs e)
{
((System.Windows.Window)sender).Close();
}
}
// In your window class's constructor. This could also be done
// as a static resource in the window's XAML resources.
CommandBindings.Add(Commands.CloseWindowDefaultBinding);
這適用於我。但並非在所有情況下。特別是,我正在使用Telerik的DataGrid控件。如果一個單元格有一個組合框,並且它已展開,然後我點擊Escape,則Escape鍵不會傳播到窗口。但是,如果ComboBox未展開,但處於編輯模式,則Escape鍵會傳播。我認爲這可能是一個控制的錯誤。你的建議確實有效。 – Markus2k 2010-04-21 14:24:02