【问题标题】:Cannot parse decimal number entered using non-English keyboard on Windows Phone无法解析在 Windows Phone 上使用非英文键盘输入的十进制数
【发布时间】:2014-08-27 14:32:10
【问题描述】:

在我的 Windows Phone 8 应用程序中,我有一个文本框,它使用 InputScopeNameValue.Number 从用户那里获取货币金额。

OnBackKeyPress 覆盖将文本框的字符串值解析为十进制值:

    base.OnBackKeyPress(e);
    decimal price = 0m;

    var value = PriceControl.PropertyValue;
    NumberStyles style = NumberStyles.Number;
    CultureInfo culture = System.Threading.Thread.CurrentThread.CurrentCulture;

    if (string.IsNullOrEmpty(PriceControl.PropertyValue) || 
        decimal.TryParse(value, style, culture, out price))
    {
        App.ViewModel.SelectedProduct.Price = price;
    }
    else
    {
        e.Cancel = true;
    }

对于 en-US,一切都按预期工作,但是一旦我将 Windows Phone 模拟器的区域设置切换到 de-CH(瑞士,但 de-DE 等其他欧洲文化也有同样的问题),就会发生以下事情:

  • 屏幕键盘现在显示“,”(逗号),而不是“.” (句点)以及数字键

  • culture.NumberFormat.CurrrencyDecimal.Separator 仍然是 '.'culture.NumberFormat.NumberDecimalSeparator(句点) 也是如此。因此无法成功解析键盘输入的十进制数!

有没有办法解决这个问题?键盘上的分隔符(逗号)和对应的 NumberFormat 中的分隔符不匹配似乎很奇怪。

【问题讨论】:

  • 您是否更改了 Windows Phone 中的键盘和语言和区域设置?
  • 更改语言后culture 是什么?我希望小数点分隔符会随着文化而改变......
  • @JonSkeet 嘿,约翰,不要走私我的观点,我正试图解决这个问题 :))
  • 在最坏的情况下,你不能做一个string.Replace(",", ".")吗?

标签: c# windows-phone-8 number-formatting cultureinfo


【解决方案1】:

在您的 decimal.TryParse 中使用 CultureInfo.InvariantCulture 而不是当前文化。

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2013-02-20
    • 2014-05-22
    • 2015-05-15
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多