2013-04-07 20 views
1

我有一個幾乎與 中描述的相同的問題WPF textbox binding not working when using stringformat 我有滑塊和文本框。文本框綁定到滑動條的值屬性,更新觸發器onpropertychanged在toway模式下。我在文本框中檢查用戶輸入,所以我只能輸入數字或「 -/+」。 我的問題是,我不僅有整數,但也浮動值,我現在不會有點後點多少數字,所以我不想限制用戶。 爲此,我使用字符串格式D StringFormat=D,但是在那種情況下TextBox中沒有可見的輸出,但我仍然可以輸入數字並且影響較小的值,但是當我移動滑塊時 - 文本從文本框中消失。使用綁定在XAML中的TextBox中的點

我希望從滑塊的值在文本框中可見,我沒有限制在點後輸入數字。我該怎麼做? 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 2013-04-07 14:56:26

+0

我嘗試過寫我自己的轉換器,但它不能正常工作: – Denis 2013-04-07 19:07:33

回答

0

首先,請嘗試使用 「浮動」 和 「ToSingle」 被 「雙規」 和 「ToDouble」。 Slider.Value是雙重的,而不是浮動。

然後,Convert.ToSingle might throw a FormatException。你應該捕捉並處理這個異常。另外,OverflowException也是安全的。或者,也可以使用double.TryParse來避免第一個例外。

然後,轉換時,你should always set一CultureInfo。你可能在一個不是「。」的系統上。但使用「,」來分隔小數。

要了解它崩潰的原因,請嘗試以下操作:調試代碼,按Ctrl-Alt-E並選中「Common Language Runtime Exceptions/Thrown」。然後,每當拋出異常時,例如一個FormatException,調試器停止,你可以看到發生了什麼。