3

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

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

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

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

当我看到这个时,我的眼睛受伤了,因为它是一个明显的hack,它会导致很多错误,因为有时需要替换逗号,有时需要替换点。我们即将在我们的软件中实现实际的本地化,所以我问:

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

4

1 回答 1

1

After some research following the very wise suggestion from Stewbob, I decided to only allow the user to input the current culture decimal separator. For that, I listen to PreviewTextInput in code behind.

The effect is that the user can only type numbers, then the current decimal separator once, then more numbers. Other characters simply "don't respond". We think this is fair usability-wise.

    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);
    }
于 2013-10-25T18:21:42.547 回答