Вопрос:Silverlight Преобразование PlatformKeyCode в код символа
Есть хороший способ в Silverlight для перехвата нежелательных символов из вводимой в текстовое поле?
фона:
У меня есть текстовое поле, которое позволяет пользователю ввести имя файла. Я хотел бы исключить неправильные имена файлов из текстового поля. Некоторыми из этих символов являются:
- '?'
- «\»
- «<»
- «>»
Хотя Silverlight класс TextBox не поддерживает событие KeyPress, у него есть KeyDown и событие KeyUp, который может быть использован для извлекать символьную информацию, когда ключ вводится в текстовое поле. Он предоставляет их в качестве члена перечисления Key или может возвращать int для PlatformKeyCode.
Конечно, диапазон клавиш больше/отличается от диапазона символов - примером этого являются клавиши «F». Однако присутствие чего-то типа события KeyPress в Windows Forms свидетельствует о полезности возможности получения конкретной информации о символе.
Чтобы сделать доказательство концепции, что все может работать я жёстко значения PlatformKeyCode для нежелательных символов для моей платформы в обработчик событий и все работало ... но конечно это только моя платформа. Мне нужно убедиться, что эта реализация является агностикой платформы. Вот код, чтобы показать, как я хотел бы, чтобы работать:
private void theText_KeyDown(object sender, KeyEventArgs e)
{
int[] illegals = { 191, 188, 190, 220, 186, 222, 191, 56, 186};
if (illegals.Any(i => i == e.PlatformKeyCode)) e.Handled = true;
}
Есть ли причина, что делает его это сложно? Было бы намного проще просто выделять нежелательные символы с регулярным выражением всякий раз, когда текст изменяется (событие TextChanged в TextBox). –
Решение Хенрика звучит намного проще. Другая идея - объявить свойство для текста в текстовом поле и использовать проверку свойства, чтобы указать пользователю, какие символы недопустимы. – Johannes
Спасибо, ребята, за ваш ответ. Я попытался объяснить вам решение в ответе ниже. – t3rse