WPF форматирование меток с помощью StringFormat

у меня есть приложение WPF. У меня есть некоторые метки и некоторые datagrids, которые привязаны к некоторым общедоступным свойствам. Некоторые из этих свойств являются числовыми значениями.

в datagrids я использовал строку ниже, чтобы гарантировать, что значения отображают только два десятичных знака, что работает. Однако, когда я использую ту же строку ниже для моей метки, она, похоже, не влияет на дисплей, поскольку число показывает около 9 знаков после запятой. Я не понимаю, почему это работает для DataGrid, но не этикетка?

StringFormat={}{0:0.##}



<Label Grid.Row="3" Grid.Column="1"
       Content="{Binding Obs.Tstat, StringFormat={}{0:0.#}}" 
       HorizontalAlignment="Center" Foreground="{StaticResource brushLinFont}" 
       FontSize="13" FontWeight="Bold"/>

обновленный код

 <Label Grid.Row="3" Grid.Column="1"
        Content="{Binding Obs.Tstat}" ContentStringFormat="{}{0:0.#}}" 
        HorizontalAlignment="Center" Foreground="{StaticResource brushLinFont}" 
        FontSize="13" FontWeight="Bold"/>

2 ответов


для метки вам нужно использовать ContentStringFormat:

<Label Content="{Binding Obs.Tstat}" ContentStringFormat="{}{0:0.##}"/>

причина:

метки Content свойство типа object и StringFormat используется только тогда, когда свойство binding имеет тип String.

если вы попробуете код с блоком по Text свойство он будет работать нормально с StringFormat потому что свойство Text имеет тип string.


просто быстрое дополнение, которое я хотел бы опубликовать вдоль этих строк, если кто-то еще столкнется с ним... Мое приложение использует локализацию, так как имеет поддержку нескольких стран, но мы также поддерживаем Системные настройки пользователя. Мы заметили ContentStringFormat значения по умолчанию для языка.

это вызвало проблему в одной из наших форм, где пользователь компьютера десятичные знаки, которые они настроили в настройках windows, не соблюдались при указании ContentStringFormat.

С управления contentpresenter просто принимает формат строки без культуры конвертера, которую вы обычно можете указать в привязке , это означает, что формат say:0:N будет возвращать только два десятичных знака, если английский язык-моя текущая культура пользовательского интерфейса,хотя у меня есть 5 десятичных знаков, указанных в моих настройках windows.

в нашем случае мы применили некоторые переопределения привязки, чтобы обойти это, но в основном просто хотели добавить это дополнительно бит информации в случае, если кто-то еще бежит к нему ;)