为什么Label和TextBox上的绑定结果不同?

时间:2012-02-24 06:47:42

标签: wpf binding

我使用的是以下XAML:

<Label Grid.Row="0" Grid.Column="0" Content="Datum"/>
<Label Grid.Row="0" Grid.Column="1" Content="{Binding TimeStamp, StringFormat={}{0:yyyy-MM-dd HH:mm:ss.fff}}"/>
<Label Grid.Row="0" Grid.Column="2" Content="Level"/>
<Label Grid.Row="0" Grid.Column="3" Content="{Binding Level}"/>

但TimeStamp的格式如下:

2.24.2012 7:38

我启动了Snoop(很棒的工具!)并注意到Label实际上是由一个TextBox组成的,而且这个TextBox包含了我定义的TimeStamp格式。然后我用TextBox替换了Label,我得到了正确格式化的TimeStamp。

<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding TimeStamp, StringFormat={}{0:yyyy-MM-dd HH:mm:ss.fff}}"/>

2012-02-24 07:38:23.123

我没有定义资源,触发器或样式块来覆盖标签行为,所以我想知道为什么会发生这种情况。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

Binding.StringFormat属性不适用于标签,您需要使用Label上的ContentStringFormat属性

<Label Grid.Row="0" Grid.Column="1" Content="{Binding TimeStamp}">
    <Label.ContentStringFormat>0:yyyy-MM-dd HH:mm:ss.fff</Label.ContentStringFormat>
</Label>

另见Binding only part of a label