2014-10-02 5 views
1

사용자 지정 TextBox를 사용하고 있으며 일부 유효성 검사를 적용한 Double 값을 사용하지만 정상적으로 작동하지만 Backspace를 누르면 불쾌감을주는 소수점도 제거됩니다. 예를 들어 현재 값이 "2.5"이고 백 스페이스를 누르면 ".5"는 제거되지만 원하는 값은 "2"여야합니다. 여기 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}" /> 

의 코드이다 사용되는 내 사용자 지정 텍스트 상자의 XAML, 난 그 PreviewTextInput 이벤트 오버라이드 (override) 한

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) 사용자가 자신의 입력을 확인하면 (focus lost?'Enter' pressed?), 다시 double.TryParse()를하고 값이 유효하지 않으면 원래의 값으로 변경하지 마십시오. – Sinatr

답변

0

PropertyChanged으로 설정되어 있습니다. 즉, 값이 변경 될 때마다 유효성을 검사합니다. LostFocus이 좋습니다.

+0

"2" 유효한 double 값이 아닙니다. 그것은 "2.0"이어야하며 wpf가 기본적으로 당신을 위해 무엇을하는지입니다. – WAQ

+0

죄송합니다.이 wasnot은 @hantoun에 게시 될 예정이었습니다. – WAQ

관련 문제