Ну, очевидно же, что вот на эту вашу фантазию:
Command="Exitfoo"
Даже сама студия прям сразу же пишет в редакторе, что данное значение тут недопустимо.
RTFM:
- Windows Desktop / WPF/ Advanced / Commanding Overview: https://learn.microsoft.com/en-us/dotnet/desktop/w...
- Далее смотрим что это за свойство —
CommandBinding.Command Property: https://learn.microsoft.com/en-us/dotnet/api/syste...
- И далее открываем список допустимых значений данного свойства —
ApplicationCommands Class: https://learn.microsoft.com/en-us/dotnet/api/syste...
Кроме того, ваш хоткей
Ctrl+W для выхода из приложения является контр-интуитивным и использовать такой хоткей для выхода из приложения нельзя, т.к. этот хоткей традиционно используется для закрытия вкладок. Кроме того, винда имеет стандартный хоткей
Alt+F4 для закрытия окна или выхода из приложения.
Для тех, кто в танке или кому просто интересно, объясню почему ошибка происходит в конвертере. А происходит следующее: парсер после разбора XML, видит значение в поле
Command — т.к. это всё XML, то там строка и из этой строки надо сделать конвертацию в тот тип, который указан в классе
CommandBinding для свойства
Command, а именно в тип, реализующий интерфейс
ICommand.
У класса
Window через цепочку наследования в предках есть класс
UIElement, который и реализует свойство привязки команд через коллекцию:
public class System.Windows.UIElement : Visual, IInputElement, IAnimatable
{
public CommandBindingCollection CommandBindings { get; }
}
И соответственно тип в этой коллекции:
public class System.Windows.Input.CommandBinding
{
public ICommand Command { get; set; }
}
И вот дальше в работу включаются конвертеры. Есть список конвертеров, а в каждом конвертере есть методы, которые сообщают что во что они могут конвертировать. И парсер по очереди опрашивает эти самые конвертеры. И вот какой-то конвертер как раз умеет конвертировать из строки в нужный тип, который и реализует интерфейс
ICommand, а именно в класс
System.Windows.Input.RoutedUICommand(
src). Соответственно список этих команд находится в статическом классе
System.Windows.Input.ApplicationCommands, среди которых и происходит поиск нужной команды. Костыльно? Да, костыльно, ну хотя бы работает.