我有一个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\}
哪个不起作用。
我甚至尝试将Expander的HeaderStringFormat属性设置为“{0}的详细信息”,但也没有将其格式化。
我能够让这种解决方法起作用:
<Expander>
<Expander.Header>
<TextBox Text="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}"></TextBox>
</Expander.Header>
</Expander>
有谁知道为什么StringFormat不适用于Header属性?
答案 0 :(得分:4)
根据http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/,看起来HeaderStringFormat
属性不适用于字符串格式绑定,而是指定绑定到实现{{{}的对象时使用的格式1}}。
鉴于此,我无法将字符串格式化直接用于绑定表达式,因此这可能只是一个错误。您应该尝试通知Microsoft,也许他们会修复它。
根据您的解决方法,我建议使用IFormattable
而不是TextBlock
,因为您可能不希望用户能够编辑TextBox
标题中的文本
答案 1 :(得分:3)
我也遇到了同样的问题,在阅读了一些文章之后,尝试各种ContentStringFormat和HeaderStringFormat我刚刚决定做下一件事:
<Expander Grid.Row="1" Padding="4">
<Expander.Header>
<TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED "{0}"'}"/>
</Expander.Header>
答案 2 :(得分:0)
它可能与Header是Object类型属性而不是String有关。将String值转换为UI控件可能会干扰格式化。 Label不是TextBox,也不是TextBox吗?这应该会给你与你最初尝试的效果相同的效果。
<强>更新强>: 另请尝试查看HeaderStringFormat属性。