Ошибка проверки TextBox

1

Я использую пользовательский TextBox, и он принимает двойное значение, на которое я применил некоторые проверки, он отлично работает, но когда я нажимаю BackSpace, он также удаляет десятичную точку, которая раздражает. Например, если текущее значение равно "2,5", и я нажимаю "назад", ".5" удаляется, тогда как требуемое значение должно быть "2.".

Вот xaml моего пользовательского TextBox, который используется в UserControl

<rmguiutil:RMTextBox Margin="5,5,0,0" Width="40" HorizontalAlignment="Left" OnlyAllow="Double"
    Text="{Binding StartConcentration, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
    IsEnabled="{Binding IngredientIngredientTypeRow, Converter={StaticResource GlobalNullObjectToBooleanConverter}, FallbackValue=False}" />

Вот код для моего пользовательского TextBox, я переопределил его событие PreviewTextInput

protected override void OnPreviewTextInput( System.Windows.Input.TextCompositionEventArgs e )
{
    base.OnPreviewTextInput( e );

    if( OnlyAllow == RMTextBoxOnlyAllow.Double && ( e.Text.Any( c => !Char.IsDigit( c ) && c != '.' ) || ( e.Text.Count( c => c == '.' ) + Text.Count( c => c == '.' ) ) > 1 ) )
    e.Handled = true;
    else if( OnlyAllow == RMTextBoxOnlyAllow.Integer && e.Text.Any( c => !Char.IsDigit( c ) ) )
    e.Handled = true;
}

Я не мог найти решения по моей проблеме.

  • 0
    Для меня неочевидно, что ты делаешь. Обычный путь будет состоять из двух этапов проверки: 1) когда пользователь редактирует значение, вы можете показать его красным цветом, если double.TryParse() вернет false прямо во время редактирования; 2) когда пользователь подтверждает свой ввод (фокус потерян? double.TryParse() Enter ?), Вы снова делаете double.TryParse() и если значение недействительно, то просто не меняйте исходное.
Теги:
xaml
wpf

1 ответ

0

UpdateSourceTrigger of Binding StartConcentration устанавливается в PropertyChanged, что означает, что он будет проверять каждый раз при изменении значения. LostFocus было бы лучше.

  • 0
    "2." не является допустимым двойным значением. это должно быть "2.0", и именно это wpf делает по умолчанию для вас.
  • 0
    извините, это не предназначалось для публикации на @hantoun

Ещё вопросы

Сообщество Overcoder
Наверх
Меню