TextBox 不支持系统十进制(点或逗号)

Posted

技术标签:

【中文标题】TextBox 不支持系统十进制(点或逗号)【英文标题】:TextBox doesn't honor System Decimal (Dot or Comma) 【发布时间】:2011-01-27 11:32:06 【问题描述】:

如果我将 TextBox 中的 Text 绑定到 float 属性,则显示的文本不支持系统小数点(点或逗号)。相反,它总是显示一个点 ('.')。但如果我在 MessageBox 中显示值(使用 ToString()),则使用正确的系统十进制。

Xaml

<StackPanel>
    <TextBox Name="floatTextBox"
             Text="Binding FloatValue"
             Width="75"
             Height="23"
             HorizontalAlignment="Left"/>
    <Button Name="displayValueButton"
            Content="Display value"
            Width="75"
            Height="23"
            HorizontalAlignment="Left"
            Click="displayValueButton_Click"/>
</StackPanel>

背后的代码

public MainWindow()

    InitializeComponent();
    FloatValue = 1.234f;
    this.DataContext = this;

public float FloatValue

    get;
    set;

private void displayValueButton_Click(object sender, RoutedEventArgs e)

    MessageBox.Show(FloatValue.ToString());

到目前为止,我已经用一个转换器解决了这个问题,该转换器用系统十进制替换 dot (有效),但这是必要的原因是什么?这是设计使然吗?有没有更简单的方法来解决这个问题?

SystemDecimalConverter(以防其他人遇到同样的问题)

public class SystemDecimalConverter : IValueConverter

    private char m_systemDecimal = '#';
    public SystemDecimalConverter()
    
        m_systemDecimal = GetSystemDecimal();
    
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
    
        return value.ToString().Replace('.', m_systemDecimal);
    
    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    
        return value.ToString().Replace(m_systemDecimal, '.');
    
    public static char GetSystemDecimal()
    
        return string.Format("0", 1.1f)[1];
    

【问题讨论】:

【参考方案1】:

看起来有一个解决方案:

http://www.nbdtech.com/Blog/archive/2009/03/18/getting-a-wpf-application-to-pick-up-the-correct-regional.aspx

这是另一个可能有帮助的讨论:

http://connect.microsoft.com/VisualStudio/feedback/details/442569/wpf-binding-uses-the-wrong-currentculture-by-default

【讨论】:

+1,这太棒了!谢谢!现在没有时间浏览您提供的链接,但我会尽快检查它们。所以我会等几个小时再接受你的回答,看看其他人是否有什么想法!伟大的工作

以上是关于TextBox 不支持系统十进制(点或逗号)的主要内容,如果未能解决你的问题,请参考以下文章

如何用VB写 求24点或任意值的四则运算 支持负数

从字符串创建浮点数

Wpf TextBox上的键盘小数分隔符,如何?

EASYUI combobox firefox 下不支持中文检索

C# winForm怎么把textbox 不可见

番石榴分离器的模式