2012-02-24 92 views
3

我用下面的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}"/> 

但时间戳正在格式如下:

2.24.2012 7:38 

我开始了Snoop(伟大的工具!),并注意到,该标签实际是由一个文本框,并且这个文本框包含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 

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

任何想法?

+0

即使结合为DateTime没有的StringFormat产生不同的结果(取决于我猜测的文化背景)。在我的系统默认TextBlock显示秒,标签不。 – Phil 2012-02-24 07:25:46

回答

4

的Binding.StringFormat属性不会在标签上工作,你需要使用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

+0

好的 - 这是一个惊喜,但这里有一个有趣的评论'*因为Label.Content是Object类型的,所以绑定看起来不需要将值转换和格式化为一个字符串*',所以我猜测它有一定的意义。我必须假定字符串格式不适用于任何**内容标签。对? – paul 2012-02-24 07:32:00

相关问题