2012-02-24 34 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

相關問題