2014-10-02 102 views
1

我正在使用自定義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; 
} 

我可以找不到解決我的問題的方法。

+0

這對我來說很不明顯,你在做什麼。正常路徑是2步驗證:1)當用戶正在編輯值時,如果在編輯過程中double.TryParse()返回false,你可以用紅色顯示他。 2)當用戶確認他的輸入時(焦點丟失?按Enter鍵?),你再次執行'double.TryParse()',如果值無效,則不要改變原來的值。 – Sinatr 2014-10-02 10:18:33

回答

0

UpdateSourceTriggerBinding StartConcentration設置爲PropertyChanged,這意味着每次對該值進行更改時都會進行驗證。 LostFocus會更好。

+0

「2.」不是有效的雙重價值。它應該是「2.0」,這就是wpf默認爲你做的事情。 – WAQ 2014-10-02 10:47:05

+0

抱歉,這並不意味着要發佈到@hantoun – WAQ 2014-10-02 10:47:52