TextBox验证错误

时间:2014-10-02 10:07:40

标签: c# wpf xaml

我正在使用自定义TextBox,它需要Double值,我已经应用了一些验证,它工作正常,但当我按BackSpace时,它也删除了恼人的小数点。例如,如果当前值是" 2.5"我按退格键" .5"被删除,而期望值应该是" 2."

以下是我在UserControl中使用的自定义TextBox的xaml

<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;
}

我找不到任何关于我的问题的解决方案。

1 个答案:

答案 0 :(得分:0)

<{1}}的{​​{1}}设置为UpdateSourceTrigger,这意味着每次对值进行更改时,它都会进行验证。 Binding StartConcentration会更好。