绑定 StringFormat 似乎无法正常工作。

7
我有一个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>

绑定没有问题,但是某些原因导致字符串格式化无法工作。它总是只显示 value 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属性吗?
3个回答

4
根据http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/的说法,似乎HeaderStringFormat属性并不适用于字符串格式绑定,而是用于指定绑定实现了IFormattable接口的对象时要使用的格式。
鉴于此,我无法直接在绑定表达式中使字符串格式化工作,这可能只是一个错误。你应该尝试通知微软,也许他们会修复它。
通过您的解决方法,我建议使用TextBlock而不是TextBox,因为您可能不希望用户能够编辑Expander标题中的文本。

好的,很有启发性。谢谢。另外,我正在使用TextBlock...我想我在发布时写错了。 - Adam

3

我也遇到了同样的问题,在阅读了一些文章、尝试了各种 ContentStringFormatHeaderStringFormat 后,我决定采取以下措施:

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

0

这可能与Header是对象类型属性而不是字符串有关。将字符串值转换为UI控件可能会干扰格式。除了TextBox之外,Label是否也可以工作?这应该会给你最初尝试做的相同效果。

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


你说得对,Header是一个对象,而TextBox.Text是一个字符串。我刚试了一下Label,当我将ContentFormatString设置为我想要的时,它可以工作。Label的Content属性也是一个对象,所以我仍然不理解...可能是Header有些奇怪的问题。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接