Wpf 绑定StringFormat不';它似乎不能正常工作

Wpf 绑定StringFormat不';它似乎不能正常工作,wpf,binding,Wpf,Binding,我有一个DataGrid和一个类似这样的扩展器: <StackPanel> <my:DataGrid Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}">...</my:DataGrid> <Expander Header="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Det

我有一个DataGrid和一个类似这样的扩展器:

<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>
这不管用

我甚至尝试将扩展器的HeaderStringFormat属性设置为“Details of{0}”,但这也不能格式化它

不过,我还是能够让这一变通办法发挥作用:

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


有人知道为什么StringFormat不适用于Header属性吗?

这可能与Header是对象类型属性而不是字符串有关。将字符串值转换为UI控件可能会干扰格式设置。与文本框相比,标签是否也起作用?这会给你和你最初尝试做的一样的效果

更新: 还可以尝试查看该属性。

根据,看起来
HeaderStringFormat
属性不是用于字符串格式绑定,而是用于指定绑定到实现
IFormattable
的对象时要使用的格式

鉴于此,我也无法让字符串格式直接在绑定表达式中工作,因此这可能只是一个bug。你应该试着通知微软,也许他们会修复它


对于您的解决方案,我建议使用
TextBlock
而不是
TextBox
,因为您可能不希望用户能够编辑
Expander
标题中的文本。

我也遇到了同样的问题,在阅读了一些文章之后,尝试了各种方法,我决定做下一件事:

<Expander Grid.Row="1" Padding="4">
                <Expander.Header>
                <TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED &quot;{0}&quot;'}"/>
                </Expander.Header>


标题是一个对象,文本框是一个字符串。不过,我只是尝试了一个标签,当我将ContentFormatString设置为我想要的内容时,它就起作用了。标签内容属性也是一个对象,所以我仍然不理解…标题有点奇怪。好吧,这是信息。谢谢还有,我用的是文本块…我想我写这篇文章的时候写错了。
<Expander Grid.Row="1" Padding="4">
                <Expander.Header>
                <TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED &quot;{0}&quot;'}"/>
                </Expander.Header>