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

标签 wpf localization

在我的 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/

相关文章:

iphone - 在 XIB 内的分段 Controller 中本地化文本

ios - AVSpeech合成器: AVSpeechSynthesisIPANotationAttribute seems like does not support Chinese

c# - 在运行时更改 WPF DataGrid 整个列的背景颜色

wpf - 内容更改时 DataGridView 样式不更新

WPF:将控件高度设置为填充网格行高

c# - 代码隐藏中的 ComboBox SelectedValuePath 问题

c++ - 未找到 Qt5 QDialogBu​​ttonBox 本地化值,尽管它们存在于 qt_xx.qm 中并且在 Qt4 中找到

ios - 尝试读取 InfoPlist.strings 文件...获取 key (?)

c# - 本地资源文件中代码隐藏字符串的翻译

.net - WPF 数据模板 ItemsControl 指定初始值和最终值