2013-04-07 1 views
1

설명과 거의 같은 문제가 있습니다. WPF textbox binding not working when using stringformat 슬라이더와 텍스트 상자가 있습니다. Textbox는 toway 모드에서 onproperty가 변경된 update trigger로 슬라이더의 value 속성에 바인딩됩니다. 나는 사용자 입력을 텍스트 상자에서 확인하므로 숫자 나 "-/+"만 입력 할 수 있습니다. 제 문제는 정수뿐만 아니라 값을 플로팅하는 것입니다. 그래서 점을 찍을 때 얼마나 많은 자리가 표시되지 않으므로 사용자를 제한하고 싶지는 않습니다. 그 목적을 위해 문자열 형식 D StringFormat=D을 사용합니다. 그러나이 경우 TextBox에 출력이 표시되지 않지만 여전히 숫자를 입력 할 수 있으며 더가는 값에 영향을 미칩니다. 그러나 슬라이더를 이동하면 텍스트가 텍스트 상자에서 사라집니다.XAML의 텍스트 상자에 도트를 바인딩을 사용하여

슬라이더의 값을 텍스트 상자에 표시하고 도트 뒤에 숫자를 입력 할 필요가 없습니다. 내가 어떻게 해? 오후 8시 30 분 P.S. .NET 4.5 사용하고 있습니다.

여기 내 변환기입니다 :

class ToStringConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      return value.ToString(); 
     } 
     return 0; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      float fvalue = System.Convert.ToSingle(value.ToString(), culture); 
      return fvalue; 
     } 
     return 0; 
    } 
} 

그것은 좋은 값을 표시,하지만 난하지 입력 값 수 -의 충돌을 항상 대신 내가 원하는 중 최대 값으로 전환합니다.

가 여기 내 XAML 코드

<Page.Resources > 

     <settingsManager:RoundingConverter x:Key="RoundingConverter"></settingsManager:RoundingConverter> 
     <settingsManager:ToStringConverter x:Key="ToStringConverter"></settingsManager:ToStringConverter> 

    </Page.Resources> 

<TextBox x:Name="TextBoxFirstPersonCameraPositionX" Text="{Binding ElementName=SliderFirstPersonCameraPositionX, Path=Value, Mode=TwoWay, IsAsync=True, Delay=0, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ToStringConverter}}" 
             Width="100" VerticalAlignment="Center" Margin="10,0,0,0" FontWeight="Normal" MaxWidth="200" MinWidth="198" HorizontalScrollBarVisibility="Auto" MaxLength="40" DataObject.Pasting="TextBoxPasting" PreviewTextInput="OnPreviewTextInput" 
             > 
           </TextBox> 
+0

현재 코드를 공유하면 다른 사람들이 신속하게 문제를 해결하는 데 도움이 될 것입니다. – Isantipov

+0

나는 내 자신의 변환기를 작성하려고했지만 제대로 작동하지 않습니다. – Denis

답변

0

우선이다 "부동"와 "이중"와 "ToDouble"에 의해 "ToSingle"를 교체하려고합니다. Slider.Value는 float가 아닌 double입니다.

그런 다음 Convert.ToSingle might throw FormatException이 발생합니다. 이 예외를 잡아서 처리해야합니다. 또한, OverflowException, 안전한 측면에 있어야합니다. 또는 처음에 예외가 발생하지 않도록 double.TryParse을 사용하십시오.

변환 할 때 should always set은 CultureInfo입니다. 당신은 "."이 아닌 시스템에있을 수 있습니다. ","는 십진수를 분리하는 데 사용됩니다.

왜 충돌하는지 알아 보려면 다음을 시도하십시오. 코드를 디버그하고 Ctrl-Alt-E를 누르고 "공용 언어 런타임 예외/발생"을 선택하십시오. 그런 다음 예외가 throw 될 때마다 (예 : FormatException이 발생하면 디버거가 멈추고 어떤 일이 일어나고 있는지 확인할 수 있습니다.

관련 문제