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

时间:2014-08-27 14:32:10

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

在我的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模拟器的Region设置切换为de-CH(瑞士,但de-DE等其他欧洲文化具有相同的问题),会发生以下情况:

  • 屏幕键盘现在显示','(逗号)而不是'。' (句号)以及数字键

  • culture.NumberFormat.CurrrencyDecimal.Separator仍然是'。',就像 culture.NumberFormat.NumberDecimalSeparator(句号)一样。因此,无法成功解析使用键盘输入的十进制数!

有解决方法吗?键盘上的分隔符号(逗号)与相应的NumberFormat中的分隔符之间的不匹配似乎很奇怪。

1 个答案:

答案 0 :(得分:0)

decimal.TryParse使用CultureInfo.InvariantCulture而不是当前文化。