我正在使用自定義TextBox,它需要Double值,我已經應用了一些驗證,它工作正常,但是當我按BackSpace時,它也會刪除惹惱的小數點。例如,如果當前值是「2.5」,並且按退格鍵「.5」被移除,而期望值應該是「2」。TextBox驗證錯誤
這是其在用戶控件
<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的XAML,我已重寫其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;
}
我可以找不到解決我的問題的方法。
這對我來說很不明顯,你在做什麼。正常路徑是2步驗證:1)當用戶正在編輯值時,如果在編輯過程中double.TryParse()返回false,你可以用紅色顯示他。 2)當用戶確認他的輸入時(焦點丟失?按Enter鍵?),你再次執行'double.TryParse()',如果值無效,則不要改變原來的值。 – Sinatr 2014-10-02 10:18:33