1

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

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

1 回答 1

0

首先,尝试用“double”和“ToDouble”替换“float”和“ToSingle”。Slider.Value 是双精度数,而不是浮点数。

然后,Convert.ToSingle可能会引发FormatException。您应该捕获并处理此异常。此外,为了安全起见,OverflowException。或者,首先使用double.TryParse来避免异常。

然后,在转换时,您应该始终设置CultureInfo。您可能在一个没有“。”的系统上。但是“,”用于分隔小数。

要找出它崩溃的原因,请尝试以下操作:调试代码,按 Ctrl-Alt-E 并检查“公共语言运行时异常/抛出”。然后,只要抛出异常,例如 FormatException,调试器就会停止,您可以看到发生了什么。

于 2015-04-02T11:19:18.613 回答