多文化与文本框

时间:2014-09-23 07:12:37

标签: c# wpf xaml binding format

我试图在文本框中输入值(双重类型),我想获得自定义格式。

为了解释,我把10001.1或10001,1和我想在我的texblock中有10 001,1。

目前我的结果是10,001.00,我不知道如何正确更改格式。

我的textblock绑定在此:

    private double? _Total = null;
    public double? Total
    {
        get
        {
            if (FiltreAffaire != null)
                _Total = ListeAfterFiltre.Sum(CF => CF.CommandeFournisseurLignes.Where(CFL => CFL.Affaire.Numero == FiltreAffaire.Split('-').First().Trim()).Sum(CFL => CFL.Total_HT));
            else
                return _ListeAfterFiltre.Sum(CF => CF.Montant_HT);

            return _Total;
        }
        set
        {
            _Total = value;
        }
    }

由于

2 个答案:

答案 0 :(得分:1)

如果您所在的国家/地区使用逗号作为小数点分隔符,则可以使用简单的StringFormat获取所需的值...

DoubleValue = 10001.1;

...

<TextBlock Text="{Binding DoubleValue, StringFormat={}{0:### ###.#}}" />

在英格兰,这将输出以下内容:

10 001.1

在法国,此应该输出:

10 001,1

您也可以使用NumberFormatInfo class

在代码中执行此操作
NumberFormatInfo numberFormatInfo = new NumberFormatInfo();
numberFormatInfo.NumberDecimalDigits = 1;
numberFormatInfo.NumberDecimalSeparator = ",";
numberFormatInfo.NumberGroupSeparator = " ";
numberFormatInfo.NumberGroupSizes = new int[] { 3 };
string value = DoubleValue.ToString("N", numberFormatInfo);

输出:

10 001,1

答案 1 :(得分:0)

我最终使用这样的东西(在Textbox上):

            CultureInfo ci = (CultureInfo)Thread.CurrentThread.CurrentUICulture.Clone();
        ci.NumberFormat.NumberDecimalSeparator = ".";
        Thread.CurrentThread.CurrentUICulture = ci;
        Thread.CurrentThread.CurrentCulture = ci;

和转换器设置值。

ValueConverter="{StaticResource StringToDoubleConverterN3Key}"

public class StringToDoubleConverterN3 : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((double)value).ToString("N3").Replace('.', ',');
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}