捕获文本框的无效输入并使用自定义转换器
本文关键字:自定义 转换器 输入 无效 文本 | 更新日期: 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;
}