This article has been localized into German by the community.
Das TextBlock Steuerelement
TextBlock ist kein Steuerelement per se, da es nicht von der Control Klasse erbt. Da es aber wie jedes andere Steuerelement in WPF genutzt wird, werden wir es dennoch der Einfachheit als Steuerelement bezeichnen.
Das TextBlock Steuerelement ist eines der elementarsten Steuerelemente in WPF und sehr hilfreich. Damit lässt sich Text auf dem Bildschirm anzeigen, ähnlich einem Label Steuerelement, nur ressourcenschonender und einfacher. Während Labels im Allgemeinen für Einzeiler, ggf. mit einem Bild, genutzt werden, ist das TextBlock Steuerelement für mehrzeiligen Text - und nur Text - ausgelegt. Beide Steuerelemente haben ihre Vorteile. Es hängt ganz von der Situation ab, welches sinnvoller ist.
Das TextBlock Steuerelement wurde bereits im Artikel "Hallo WPF!" benutzt. Zuallerst aber ein Blick auf den Textblock in seiner einfachsten Form:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock>This is a TextBlock</TextBlock>
</Grid>
</Window>
Es ist so einfach wie es aussieht und falls Du die die letzten Kapitel dieses Tutorials gelesen hast, sollte es nichts Neues sein. Der Text zwischen den TextBlock-Tags ist einfach eine Kurzform, um die Text-Eigenschaft des TextBlocks zu setzen.
Im nächsten Beispiel versuchen wir es mit einem längeren Text, um zu zeigen, wie das TextBlock Steuerelement damit umgeht. Ich habe auch einen kleinen Rand hinzugefügt, damit es besser aussieht.
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock Margin="10">This is a TextBlock control and it comes with a very long text</TextBlock>
</Grid>
</Window>
Umgang mit langen Zeichenketten
Wie Du dem Screenshot weiter unten entnehmen kannst, kann TextBlock bereits mit langen, mehrzeiligen Texten umgehen. Standardmäßig passiert allerdings noch nichts mit dem Text, wie im Beispiel zu sehen ist: WPF stoppt den Rendering-Prozess, der innerhalb des Fensters stattfindet, sobald es nicht mehr möglich ist, diesen anzuzeigen.
Zum Glück gibt es mehrere Wege, die hier zum Ziel führen. In den folgenden Beispielen beschreibe ich alle Möglichkeiten und mein Vorgehen:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="200" Width="250">
<StackPanel>
<TextBlock Margin="10" Foreground="Red">
This is a TextBlock control<LineBreak />
with multiple lines of text.
</TextBlock>
<TextBlock Margin="10" TextTrimming="CharacterEllipsis" Foreground="Green">
This is a TextBlock control with text that may not be rendered completely, which will be indicated with an ellipsis.
</TextBlock>
<TextBlock Margin="10" TextWrapping="Wrap" Foreground="Blue">
This is a TextBlock control with automatically wrapped text, using the TextWrapping property.
</TextBlock>
</StackPanel>
</Window>
Jetzt haben wir drei TextBlock Steuerelemente, welche für eine bessere Übersicht unterschiedlich gefärbt sind. Alle behandeln den Fakt, dass der Textinhalt zu lange ist, auf verschiedene Art und Weise:
Der rote TextBlock verwendet einen LineBreak Tag für einen Zeilenumbruch an einer manuell festgelegten Position. Dies gibt Dir die volle Kontrolle darüber, wo Du einen Zeilenumbruch einfügen möchtest, ist allerdings in den meisten Situationen nicht sehr flexibel. Wenn der Benutzer das Fenster vergrößert, wird der Text immer noch an der gleichen Stelle umgebrochen, auch wenn der ganze Text in eine Zeile passen würde.
Der grüne TextBlock verwendet die TextTrimming Eigenschaft mit dem Wert CharacterEllipsis um Auslassungspunkte (...) an den TextBlock zu hängen, wenn kein Text mehr in das Steuerelement passt. Das ist eine häufig verwendet Methode um zu zeigen, dass es mehr Text gibt, aber nicht genug Platz zum darstellen vorhanden ist. Dies wird vor Allem verwendet, wenn Du Texte verwendest die möglicherweise zu lang sind, Du aber absolut keinen Zeilenumbruch verwenden möchtest. Alternativ zu CharacterEllipsis kannst Du auch WordEllipsis verwenden, welches den Text nach dem letztmöglichen Wort anstatt nach dem letzten Zeichen abschneidet. Das verhindert, dass ein Wort nur teilweise angezeigt wird.
Der blaue TextBlock verwendet die TextWrapping Eigenschaft mit dem Wert Wrap, um überall dort, wo der Text zu lang für die aktuelle Zeile wäre, einen Zeilenumbruch einzufügen. Im Gegensatz zum ersten TextBlock, bei dem wir den Zeilenumbruch manuell festgelegt haben, passiert dies hier völlig automatisch. Außerdem werden die Umbrüche automatisch angepasst, falls der TextBlock mehr oder weniger Platz zur Verfügung erhält. Versuche mal das Fenster im Beispiel größer oder kleiner zu machen und Du wirst sehen, wie die Zeilenumbrüche sich an den Platz anpassen.
Dieser Artikel befasste sich hauptsächlich mit einfachen Zeichenketten in einem TextBlock. Im nächsten Kapitel sehen wir uns ein paar erweiterte Funktionen des TextBlock an, welche uns erlauben, Texte mit verschiedenen Styles innerhalb des TextBlock zu erstellen.