Связывание StringFormat, кажется, не работает правильно - PullRequest
7 голосов
/ 12 апреля 2009

У меня есть DataGrid и Expander, вот так:

<StackPanel>
<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False"  ItemsSource="{Binding}">...</my:DataGrid>
<Expander Header="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}">...</Expander>
</StackPanel>

Привязка в порядке, но по какой-то причине форматирование строки не будет работать. Всегда отображается только значение dataGrid1.SelectedItem.Name Я также попробовал:

StringFormat=Details of \{0\}

, который не работает.

Я даже попытался просто установить для свойства HeaderStringFormat Expander значение «Details of {0}», но это тоже не форматирует.

Мне удалось заставить этот обходной путь работать, хотя:

<Expander>
<Expander.Header>
<TextBox Text="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}"></TextBox>
</Expander.Header>
</Expander>

Кто-нибудь знает, почему StringFormat не работает для свойства Header?

Ответы [ 3 ]

4 голосов
/ 13 апреля 2009

Согласно http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/, похоже, что свойство HeaderStringFormat предназначено не для использования со связыванием формата строки, а скорее для указания формата, используемого при привязке к объекту, который реализует IFormattable.

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

С вашим решением я бы предложил использовать TextBlock вместо TextBox, поскольку вы, вероятно, не хотите, чтобы пользователь мог редактировать текст в заголовке Expander.

3 голосов
/ 26 мая 2014

Я также столкнулся с той же проблемой, и после прочтения некоторых статей, пробуя всевозможные ContentStringFormat и HeaderStringFormat Я просто решил сделать следующее:

<Expander Grid.Row="1" Padding="4">
                <Expander.Header>
                <TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED &quot;{0}&quot;'}"/>
                </Expander.Header>
0 голосов
/ 12 апреля 2009

Это может быть связано с тем, что Header является свойством типа Object, а не String. Преобразование значения String в элемент управления UI может мешать форматированию. Работает ли Label вместо TextBox? Это должно дать вам тот же эффект, что вы изначально пытались сделать.

Обновление : Также попробуйте заглянуть в свойство HeaderStringFormat .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...