使用绑定在XAML中的TextBox中进行点

时间:2013-04-07 13:57:57

标签: wpf xaml

我遇到的问题几乎和上面描述的一样 WPF textbox binding not working when using stringformat 我有滑块和文本框。文本框绑定到滑块的值属性,并在toway模式下使用更新触发器onpropertychanged。我在文本框中检查用户输入,所以我只能输入数字或“ - / +”。 我的问题是我不仅有整数,而且还有浮点值,我现在没有点数后会有多少位数,所以我不想限制用户。 我为此目的使用字符串格式D StringFormat=D,但在这种情况下,TextBox中没有输出可见,但我仍然可以输入数字,它会影响slier值,但是当我移动滑块时 - 文本从文本框中消失。

我希望滑块中的值在文本框中可见,并且我在点后输入数字没有限制。我该怎么做? 附:我使用的是.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>

1 个答案:

答案 0 :(得分:0)

首先,尝试更换&#34; float&#34;和#34; ToSingle&#34; by&#34; double&#34;和&#34; ToDouble&#34;。 Slider.Value是一个double,而不是float。

然后,Convert.ToSingle might throw一个FormatException。您应该捕获并处理此异常。另外,OverflowException是安全的。或者,使用double.TryParse代替首先避免例外。

然后,转换时,你should always set一个CultureInfo。您可能所在的系统不是&#34;。&#34;但是&#34;,&#34;用于分隔小数。

要找出崩溃的原因,请尝试以下操作:调试代码,按Ctrl-Alt-E并检查&#34;公共语言运行时异常/抛出&#34;。然后,每当抛出异常时,例如,一个FormatException,调试器停止,你可以看到发生了什么。