无法解析在 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 8.1 中使用后台任务(需要 ID_CAP_NETWORKING,但它包含在清单中)
无法在 windows phone 7.5(vs2010) 上使用 strophe.js 保持与 XMPP 服务器的连接