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