捕获文本框的无效输入并使用自定义转换器

本文关键字:自定义 转换器 输入 无效 文本 | 更新日期: 2023-09-27 18:34:33

我目前正在用 C# 创建一个 WPF 用户界面,其中包含一个面向德国市场的文本框。

我在文本框文本和双精度值之间创建了一个数据绑定。

<TextBox Text="{Binding Path=Length, Mode=TwoWay}"/>

如果我输入"10.4",它将保存双精度值 10,4

如果我输入"10,4",它将保存双精度值 104.0

如果我输入"asd",它不会保存任何内容,而是在文本框周围放置一个红色突出显示。

我希望盒子接受两种方式","和"." 并平等对待他们。

因此我使用了转换器(我从这里得到的:https://social.msdn.microsoft.com/Forums/de-DE/b3a5a9ba-0ebe-4a8a-9e34-f32e9545c941/kommazahlen-im-datagrid(

向 XAML 添加Converter={StaticResource DoubleConverter}, ConverterCulture=de-de,

public class DoubleConverter : System.Windows.Data.IValueConverter
{
    #region IValueConverter Member
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return double.Parse(value.ToString().Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
    }
    #endregion
}

","和"."问题现已解决,但"ASD"案例中的行为已更改。我得到一个例外,红色方块不见了。

如何将这两种行为结合起来?

谢谢卡尔

捕获文本框的无效输入并使用自定义转换器

string input = value.ToString().Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
double number;
bool result = Double.TryParse(input , out number);
if (result)
{
    return number;         
}
else
{
    return input;
}