【问题标题】:Multiple culture with textbox带有文本框的多种文化
【发布时间】:2014-11-17 07:18:51
【问题描述】:

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

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

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

我的文本块在此​​绑定:

    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;
        }
    }

谢谢

【问题讨论】:

  • 您可以使用custom format。不清楚您为什么将您的问题称为“多元文化”。

标签: c# wpf xaml binding format


【解决方案1】:

我终于使用了这样的东西(在文本框上):

            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;
    }
}

【讨论】:

    【解决方案2】:

    您可以使用简单的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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多