StringFormat VS ContentStringFormat
Während Zeichenketten in Textblöcken (Steuerelement: TextBlock) problemlos mit einem StringFormat formatiert werden können, gibt es diesen Luxus für Label-Steuerelemente nicht. Die Erklärung für diesen Misstand ist relativ einfach. Obwohl Label sehr oft zur Beschriftung eingesetzt werden, kann ein Label-Steuerelement ausser Texten auch andere Steuerelemente oder Grafiken aufnehmen. Das geht bei einem Textblock allerdings nicht.
Möchte man aber in einem Label ebenfalls Text anzeigen, und diesen formatiert ausgeben, kann man sich der Eigenschaft ContentStringFormat bedienen. Sie hat die gleiche Funktion wie StringFormat in einem TextBlock, wird aber etwas anders verwendet, denn es ist keine Eigenschaft der Datenbindung.
Im direkten Vergleich wird der Unterschied sehr schnell deutlich.
<TextBlock Text="{Binding Path=Price,
StringFormat=N2 }"></TextBlock>
<Label Content="{Binding Path=Price}" ContentStringFormat="N2"></Label>
<Label Content="{Binding Path=Price}" ContentStringFormat="N2"></Label>
Durch zusätzliche Formatierung ist es möglich, die
angebundenen Werte um Einheitenbezeichnungen oder
andere Texte zu erweitern. Im nachfolgenden Code
wird eine Zahl auf zwei Nachkommestellen formatiert
und ihr der Text „Euro“ angehängt.
<TextBlock Text="{Binding Path=Price,
StringFormat={}{0:N2} Euro }"></TextBlock>
<Label Content="{Binding Path=Price}" ContentStringFormat="{}{0:N2} Euro" ></Label>
<Label Content="{Binding Path=Price}" ContentStringFormat="{}{0:N2} Euro" ></Label>
Möchte man dem Wert lieber einen Text
vorausstellen, ist eine etwas andere Formatierung
nötig:
<TextBlock Text="{Binding Path=Price,
StringFormat=Summe:{0:N2}}"></TextBlock>
<Label Content="{Binding Path=Price}"ContentStringFormat="Summe:{0:N2}" ></Label>
<Label Content="{Binding Path=Price}"ContentStringFormat="Summe:{0:N2}" ></Label>
Eine Kombination aus beiden Formatierungen ist
ebenfalls möglich.
<TextBlock Text="{Binding Path=Price,
StringFormat=Summe: {0:N2}Euro}"
></TextBlock>
<Label Content="{Binding Path=Price}" ContentStringFormat="Summe:{0:N2} Euro" ></Label>
<Label Content="{Binding Path=Price}" ContentStringFormat="Summe:{0:N2} Euro" ></Label>