Как отобразить процентные значения с помощью ContentStringFormat? - PullRequest
1 голос
/ 03 декабря 2009

Привет просветленным!

Я играю над этим уже несколько часов, но не увенчался успехом (возможно, потому, что я довольно новичок в WPF):

У меня есть DataGrid, DataContext которого связан с DataTable. DataGrid имеет фиксированный размер, и его целью является хранение таблицы значений y (x) (то есть заголовки показывают значения x, а соответствующие значения y вставляются из буфера обмена и отображаются в первом DataGridRow). Все идет нормально. Значения вставляются (присваиваются в виде строк dataTable.rows [0] [i], где i = 0 ... n) отлично и хорошо отображаются.

Но отображаемые числа являются процентными значениями, и я хочу, чтобы они отображались следующим образом:

«0,18» становится «18%»

Итак, я решил справиться с этим, используя стиль, который должен применяться ко всем объектам DataGridCell:

<Style TargetType="{x:Type Controls:DataGridCell}">
    <Style.Setters>
        <Setter Property="ContentStringFormat" Value="{}{0:P}"/>
        <Setter Property="Foreground" Value="DarkGray"/>
        <Setter Property="Background" Value="Yellow"/>
    </Style.Setters>
</Style>

Тогда цвета фона и переднего плана принимаются в порядке, но числа по-прежнему отображаются в виде десятичных дробей (т. Е. «0,18» по-прежнему читает «0,18».

Как я могу это исправить?

Заранее спасибо Йорг

Ответы [ 2 ]

4 голосов
/ 04 декабря 2009

Полагаю, вы можете указать StringFormat вместе с определением привязки для столбца сетки данных. Что-л. как это:

<DataGridTextColumn Header="Column_Header" Binding="{Binding Path=Field_Name, StringFormat='{}{0:P}'}"/>

надеюсь, это поможет, с уважением

0 голосов
/ 05 декабря 2009

Я думаю, проблема в том, что тип данных, который вы пытаетесь отформатировать, не является числом. Попробуйте изменить тип данных таблицы на double или какой-либо другой числовой тип.

Вот пример, иллюстрирующий мою точку зрения:

string stringValue = "0.18";
string formattedStringValue = String.Format("{0:P}", stringValue);
// formattedStringValue = 0.18

double doubleValue = 0.18;
string formattedDoubleValue = String.Format("{0:P}", doubleValue);
// formattedDoubleValue = 18.00 %
...