Обработчик событий KeyDown может быть не лучшим местом для этого, так как символ уже добавлен в TextBox. Вы можете ответить на событие PreviewKeyDown и предотвратить его продолжение, но это может иметь неизвестные последствия.
Одним из подходов было бы присоединить ValidationRule к TextBox. Хотя это не остановит пользователя при вводе символа, оно сообщит им, что ему не разрешено. Для этого вы производите от System.Windows.Controls.ValidationRule, чтобы получить что-то вроде этого:
public class MyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
// Logic to determine if the TextBox contains a valid string goes here
// Maybe a reg ex that only matches alphanumerics and spaces
if(isValidText)
{
return ValidationResult.ValidResult;
}
else
{
return new ValidationResult(false, "You should only enter an alphanumeric character or space");
}
}
}
А затем используйте его в XAML следующим образом:
<TextBox>
<TextBox.Text>
<Binding Path="MyString"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<myns:MyValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Каждый раз, когда пользователь вводит недопустимый символ, он получает сообщение об ошибке. Надеюсь, это пригодится.