无法解析在 Windows Phone 上使用非英文键盘输入的十进制数

Posted

技术标签:

【中文标题】无法解析在 Windows Phone 上使用非英文键盘输入的十进制数【英文标题】:Cannot parse decimal number entered using non-English keyboard on 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(",", ".")吗? 【参考方案1】:

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

【讨论】:

以上是关于无法解析在 Windows Phone 上使用非英文键盘输入的十进制数的主要内容,如果未能解决你的问题,请参考以下文章

Windows phone:无法使用套接字连接到计算机

无法在 Windows Phone 8.1 中使用后台任务(需要 ID_CAP_NETWORKING,但它包含在清单中)

无法在 windows phone 7.5(vs2010) 上使用 strophe.js 保持与 XMPP 服务器的连接

如何使用`this解析C#(Windows Phone)中的JSONData。

Windows Phone 7 模拟器无法运行

动画无法在 Windows Phone 的滚动视图中开始