Я использую PreviewTextInput для проверки десятичного числа. Вот мой код:
Код: Выделить всё
private void AmountTextBox_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
TextBox t = sender as TextBox;
string newText = t.Text.Insert(t.SelectionStart,e.Text);
Regex regex = new Regex(@"^[0-9]{1,12}(?:\.[0-9]{0,2})?$");
e.Handled = !regex.IsMatch(newText);
}
Правильно принимаются только цифры и одна десятичная точка, но десятичная точка принимается только в том случае, если пользователь вставляет ее между числами. Если десятичное число вводится в конце строки, оно не добавляется в текстовое поле, даже если регулярное выражение возвращает совпадение (т. е. e.Handled = false). Естественно, при вводе значения пользователь вводит левую часть десятичной дроби, затем десятичную точку, а затем правую часть десятичной точки. Почему десятичная дробь опускается? Это артефакт обработки PreviewTextInput? Я просто упускаю что-то очевидное?
Подробнее здесь:
https://stackoverflow.com/questions/785 ... -not-if-it