Windows Phone 8.1 текстовое поле символов VirtualKey проверки
я делаюопинг Windows Phone 8.1 приложение. В текстовом поле я хочу запретить пользователю вводить только любые нецифровые буквы [0-9].
Итак, вот мой код:
private void NumKeyDown(object sender, KeyRoutedEventArgs e)
{
bool isNumber = (e.Key == Windows.System.VirtualKey.Number0 ||
e.Key == VirtualKey.Number1 ||
e.Key == VirtualKey.Number2 ||
e.Key == VirtualKey.Number3 ||
e.Key == VirtualKey.Number4 ||
e.Key == VirtualKey.Number5 ||
e.Key == VirtualKey.Number6 ||
e.Key == VirtualKey.Number7 ||
e.Key == VirtualKey.Number8 ||
e.Key == VirtualKey.Number9 ||
e.Key == VirtualKey.Back);
CoreVirtualKeyStates shiftState = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift);
bool shiftIsNotDown = true;
if ((shiftState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down)
shiftIsNotDown = false;
e.Handled = !(isNumber && shiftIsNotDown);
}
это работает, но есть два основных недостатка:
1- он также принимает сдвинутые символы (т. Е. @ # $% ^ & *), Пока это не требуется.
2 - когда я запускаю приложение, текстовое поле заполняется номером. Я могу ввести любое число или символы (! @ # $% ^), Также я могу удалить, используяBACKSPACE
, в течение этого времениShiftState
являетсяNONE
, Однако, как только я удаляю все содержимое в текстовом поле, используяBACKSPACE
ShiftState
изменения в [locked | Down
] и я не могу ничего ввести в это текстовое поле.
обратите внимание, что я никогда не касаюсь кнопки переключения передач!
где я тут не прав ??
ОБНОВИТЬ
Я обнаружил, что при использовании функции смахивания вводятся текстовые буквы без запуска события keyDown, которое я применял :(
любая помощь приветствуется