I run English Windows with regional settings set to Slovenian, which means I’m also using a comma (,) for my decimal separator character, not a dot (.), which is mostly used in English-speaking countries.
Silverlight sees my configuration as:
CultureInfo.CurrentCulture: sl-SI
CultureInfo.CurrentUICulture: en-US
And with my current setup I still have to use a dot for my decimal separator. To test this, I created a business object with numeric (decimal) property and use a TwoWay-bound TextBox on it.
Typing a comma-separated value into the box
and tabbing out of it, gets me
whereas entering a dot-separated value
leaves me with
Silverlight is clearly ignoring my regional settings so what can I do to make this work?
Rather than catching keystrokes and convert dots into commas etc., one simple solution comes in a form of a value converter, which would use a CurrentCulture when converting a number between string and decimal:
public class CultureNumberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((decimal)value).ToString(CultureInfo.CurrentCulture);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
decimal returnValue;
if (decimal.TryParse(value.ToString(), NumberStyles.Any, CultureInfo.CurrentCulture, out returnValue))
{
return returnValue;
}
return value;
}
}
Here’s a full solution sample:
4020794a-3ec0-4d70-bc68-5cfcd21f4185|9|3.2|27604f05-86ad-47ef-9e05-950bb762570c