Windows Presentation Foundation - 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>

Eine Kombination aus beiden Formatierungen ist ebenfalls möglich.

<TextBlock Text="{Binding Path=Price, StringFormat={}{0:N2} Euro }"></TextBlock> 

<Label Content="{Binding Path=Price}" ContentStringFormat="{}{0:N2} Euro" ></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=Summe:{0:N2}}"></TextBlock> 

<Label Content="{Binding Path=Price}"ContentStringFormat="Summe:{0:N2}" ></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}Euro}" ></TextBlock> 

<Label Content="{Binding Path=Price}" ContentStringFormat="Summe:{0:N2} Euro" ></Label>


Geschrieben am: 18.03.2007
Technologien: C#, WPF, Windows, .NET