我认为问题在于,当在数据绑定中使用 StringFormat 时,它不尊重当前的文化。
在过去,我使用了一个简单的IValueConverter来格式化值。如果您的应用程序允许用户指定所有数字的格式选项,例如小数位数,这将很有用。或者,您可以使用 ConverterParameter 指定格式字符串并简单地返回:
String.Format(CultureInfo.CurrentCulture, converterParameter, value)
如果您不需要用前缀或后缀包围值,则以下转换器应允许您与格式化值相互转换:
public class StringFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
var parameterString = parameter as string;
if (value != null && parameterString != null)
{
return String.Format(CultureInfo.CurrentCulture, "{0:"+ parameterString + "}", value);
}
else
{
return string.Empty;
}
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (targetType == typeof (double))
{
return System.Convert.ToDouble(value, CultureInfo.CurrentCulture);
}
else if (targetType == typeof(int))
{
return System.Convert.ToInt32(value, CultureInfo.CurrentCulture);
}
// Any other supported types
else
{
throw new NotImplementedException();
}
}
}