WPF StringFormat数据绑定文本未出现

时间:2010-09-21 18:30:35

标签: wpf binding

我试图在绑定到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>

在这种情况下,会显示级别值,但不会出现任何其他值。我已经尝试了几种不同的方式来解决这个问题,似乎没有任何作用。

1 个答案:

答案 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>

结果如下:
alt text

<强>更新

此外,当您不添加任何控件时,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的美丽。