Значение ToString возвращается как эти различные ключи, потому что оно получает имя ключа, а не обязательно значение символа, которое вы хотите проверить. Я бы действительно рекомендовал использовать перечисление ключей там ...
Что касается вашего вопроса, я не уверен на 100%, что вы пытаетесь сделать (это не поможет в видеоиграх и т. Д.), Но, возможно, событие UIElement.PreviewTextInput может помочь - вместо того, чтобы отлавливать отдельные нажатия клавиш, вы получаете фактический ввод текста, который помогает в других ситуациях, например при работе с распознаванием голоса и т. д.
Из ваших комментариев видно, что вы пытаетесь захватить как не символьные, так и символьные индикаторы; они могут потенциально конфликтовать друг с другом (особенно на сжатых клавиатурах), поэтому кажется, что MS создала структуру таким образом, что ситуация не была случайно пропущена. (Ваша конкретная ситуация показывает разницу между Shift + тире и Shift +? На двух разных клавиатурах; я уверен, что это еще не все.) Я бы рекомендовал искать только нажатия клавиш и дать возможность конечному пользователю вашего приложения переделать клавишу привязок.
Что напоминает мне, будьте осторожны с событиями "MouseDown", потому что они не будут происходить на сенсорных поверхностях (таких как Microsoft Surface) - лучше всего кодировать для всех доступных событий.
Удачи в вашем проекте!