Как я могу назначить поведение «Закрыть при нажатии клавиши Escape» для всех окон WPF в проекте?
================================================================================================

Есть ли какой-нибудь простой способ заставить целое приложение WPF реагировать на нажатия клавиш Escape, пытаясь закрыть текущую вдову? Ручная настройка привязок команд и ввода не является большой проблемой, но мне интересно, является ли повторение этого XAML во всех окнах наиболее элегантным подходом?

Любые конструктивные предложения приветствуются!

Все, что я могу предложить для улучшения, это устранить необходимость в обработчике событий путем привязки к статическому экземпляру команды.

Примечание. Это будет работать только в .NET 4 и более поздних версиях, поскольку для этого требуется возможность привязки к`KeyBinding` свойства.

Сначала создайте команду, которая принимает Window в качестве параметра и вызывает`Close` в пределах`Execute` метод:

Тогда вы можете связать свой`KeyBinding` в статику`Instance` имущество:

Я не знаю, что это обязательнолучше чем ваш подход, но это означает, что на вершине каждого`Window` и что вам не нужно включать обработчик событий в каждом



На`Window`показано с`ShowDialog()` ты можешь использовать:



Или вы можете просто добавить кнопку с Отмена как текст и установить`IsCancel = True`, Тогда Escape будет работать как команда по умолчанию для закрытия.



Создайте`RoutedUICommand` как ниже

и добавить его привязку команды в конструкторе



Другой возможный способ - использовать прикрепленные свойства.

Ниже приведен суть кода:

```
<script src="https://gist.github.com/meziantou/1e98d7d7aa6aa859d916.js"></script>
```


Вы также можете использовать PreviewKeyDown Event

Код за вызовом вам закрыть команду



Ничто из вышеперечисленного не помогло мне, кроме Кая. Я изменил его ответ: я добавил 'btn\_close.IsCancel = true;' для конструктора. SettingsWindow - это мое второе окно, а главное окно (по умолчанию) MainWindow.

Надеюсь, поможет,

Simon S люблю Нию