【问题标题】:Dot in TextBox in XAML using bindingXAML中TextBox中的点使用绑定
【发布时间】:2013-03-29 14:18:43
【问题描述】:

我遇到的问题与中描述的几乎相同 WPF textbox binding not working when using stringformat 我有滑块和文本框。文本框绑定到滑块的值属性,更新触发器 onpropertychanged 在 toway 模式下。我在文本框中检查用户输入,所以我只能输入数字或“-/+”。 我的问题是我不仅有整数,还有浮点值,而且我现在不知道点后有多少位数,所以我不想限制用户。 为此,我使用字符串格式 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>

【问题讨论】:

  • 分享您当前的代码将帮助其他人快速解决您的问题
  • 我尝试编写自己的转换器,但无法正常工作:

标签: wpf xaml


【解决方案1】:

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

然后,Convert.ToSingle might throw 一个 FormatException。您应该捕获并处理此异常。此外,为了安全起见,OverflowException。或者,使用double.TryParse 来避免首先出现异常。

然后,在转换时,您 should always set 一个 CultureInfo。您可能在一个没有“。”的系统上。但是小数点用“,”隔开。

要找出崩溃的原因,请尝试以下操作:调试您的代码,按 Ctrl-Alt-E 并检查“Common Language Runtime Exceptions / Thrown”。然后,每当抛出异常时,例如一个 FormatException,调试器停止,你可以看到发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多