我试图在绑定到XML源的过程中设置TreeviewItem的头文本。一切都运行正常,除了标题中出现的唯一内容是我绑定的文本,而不是字符串格式的其他内容。例如:
<HierarchicalDataTemplate x:Key="LogDataTemp" ItemsSource="{Binding Path=log}">
<TreeViewItem>
<TreeViewItem.Header>
<Binding Path="Attribute[level].Value" StringFormat="TEST \{0\}" />
</TreeViewItem.Header>
</TreeViewItem>
</HierarchicalDataTemplate>
在这种情况下,会显示级别值,但不会出现任何其他值。我已经尝试了几种不同的方式来解决这个问题,似乎没有任何作用。
答案 0 :(得分:1)
不要转义StringFormat中的大括号。您希望将格式应用于绑定中的第0个元素。
例如,使用名为“Level”的简单属性:
<TextBlock x:Name="txtUnformatted" Grid.Row="0" Foreground="White" >
<TextBlock.Text>
<Binding Path="Level" />
</TextBlock.Text>
</TextBlock>
<TextBlock x:Name="txtFormatted" Grid.Row="1" Foreground="White">
<TextBlock.Text>
<Binding Path="Level" StringFormat="Test {0:000000}" />
</TextBlock.Text>
</TextBlock>
结果如下:
<强>更新强>
此外,当您不添加任何控件时,Header的默认实现是一个简单的ContentPresenter,它不应用格式。要解决此问题,只需将TextBlock放入标题中,然后将要格式化的文本绑定到该标题。
<HierarchicalDataTemplate x:Key="LogDataTemp" ItemsSource="{Binding Path=log}">
<TreeViewItem>
<TreeViewItem.Header>
<TextBlock>
<TextBlock.Text>
<Binding Path="Attribute[level].Value"
StringFormat="TEST {0}" />
</TextBlock.Text>
</TextBlock>
</TreeViewItem.Header>
</TreeViewItem>
</HierarchicalDataTemplate>
将控件放入标题控件(例如,包含图像和标签的网格)是完全可以接受的(并且通常已完成)。 WPF的美丽。