如何在文本框中接受逗号(“,”)或点(“。”)作为小数分隔符,同时在WPF中保留文化和区域设置?

时间:2013-10-25 13:05:56

标签: wpf localization

在我的WPF项目中,可用性测试显示用户可以在数字输入文本框中键入点或逗号作为小数点分隔符。

为了清理它,我创建了一个用逗号替换逗号的转换器,或用逗号替换逗号,它可以工作,但前提是文化使用了被替换的分隔符。

这是我的转换器ConvertBack方法中的代码:

return System.Convert.ToDouble(((string)value).Replace(',', '.');

当我看到这个时,我的眼睛受伤了,因为这是一个明显的黑客攻击,它造成了很多错误,因为有时需要更换逗号,有时候更换点。我们即将在我们的软件中实现实际本地化,所以我问:

“这样做的正确方法是什么,即允许用户使用逗号或点,而不会破坏所有整洁的本地化基础架构?”

1 个答案:

答案 0 :(得分:1)

根据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);
    }