Silverlight XAML StringFormat: вывести число с пробелом в качестве разделителя тысяч - PullRequest
2 голосов
/ 03 ноября 2011

Я хочу отформатировать число следующим образом:

100000000 => 100 000 000 или -1500 => -1 500 или -500 => -500

Пока я использую этот метод, но он плохо работает с отрицательными значениями:

<TextBlock Text="{Binding Path=Value, StringFormat='### ### ##0'}" />

Например, с: -500 Я получил - 500 (два пробела между '-' и '500')

Есть намеки?Возможно ли это сделать без конвертера?

Спасибо.

1 Ответ

2 голосов
/ 03 ноября 2011

Я не думаю, что вы можете избежать конвертера в этом случае. Ваше текущее использование пробелов рассматривается как литералы и просто вводится в окончательное число в этих позициях символов.

Правильная строка формата на самом деле "#, ## 0". "," - это фактически директива, которая группирует цифры в трехзначные группы и помещает разделительную строку между ними. Фактическая используемая строка разделителя берется из строкового свойства NumberGroupSeparator NumberFormat класса CultureInfo, используемого xaml. Обычно это из культуры "en-US" и будет запятой.

Нет способа указать пользовательский экземпляр CultureInfo, который будет использоваться, поэтому вы не можете манипулировать NumberGroupSeparator. Следовательно, вам нужно будет использовать экземпляр IValueConverter.

Этот код консольного приложения генерирует соответствующий вывод

            NumberFormatInfo nfi = new CultureInfo(String.Empty).NumberFormat;
            nfi.NumberGroupSeparator = " ";
            Console.WriteLine((100000000).ToString("#,##0",nfi));
            Console.WriteLine((-500).ToString("#,##0",nfi));
...