在我的 WPF 项目中,可用性测试表明用户可以在数字输入文本框中键入点或逗号作为小数点分隔符。
为了解决这个问题,我创建了一个转换器,用点替换逗号,或用逗号替换点,它可以工作,但前提是文化使用了被替换的分隔符。
这是我的转换器 ConvertBack
中的代码方法:
return System.Convert.ToDouble(((string)value).Replace(',', '.');
当我看到这个时,我的眼睛受伤了,因为它是一个明显的黑客,它导致了很多错误,因为有时需要替换逗号,有时需要替换点。我们即将在我们的软件中实现实际的本地化,所以我问:
“这样做的正确方法是什么,即允许用户使用逗号或点,而不会破坏所有整洁的本地化基础设施?”
最佳答案
在遵循 Stewbob 非常明智的建议进行一些研究之后,我决定只允许用户输入当前的文化小数点分隔符。为此,我听 PreviewTextInput
在后面的代码中。
效果是用户只能键入数字,然后是当前的小数点分隔符一次,然后是更多的数字。其他字符只是“不响应”。我们认为这是公平的可用性明智的。
private void PreviewNumberInput(object sender,
System.Windows.Input.TextCompositionEventArgs e) {
string input = ((TextBox)sender).Text + e.Text;
string pattern = "^[0-9]+[" +
Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator +
"]?([0-9]+)?$";
Regex regex = new Regex(pattern);
e.Handled = !regex.IsMatch(input);
}
关于wpf - 如何让文本框接受逗号 (",") 或点 (".") 作为小数点分隔符,同时在 WPF 中保留文化和区域设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19590724/