This article has been localized into German by the community.
Das Label Kontrollobjekt
Das Label Steuerelement in seiner einfachsten Ausprägung, wird dem TextBlock-Element, welches wir bereits in einem anderen Artikel eingesetzt haben, sehr ähnlich sehen. Sie werden jedoch sehr schnell feststellen, dass das Label statt einer Text- eine Content-Eigenschaft besitzt. Der Grund dafür ist, dass das Label, jede Art von Steuerelement in sich enthalten kann, statt nur Text. Der Content kann trotzdem auch eine Zeichenkette sein, wie Sie in diesem ersten und sehr einfachen Beispiel sehen können:
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="100" Width="200">
<Grid>
<Label Content="This is a Label control." />
</Grid>
</Window>
Etwas, was Sie vielleicht auch bemerkt haben, ist, dass das Label als Grundeinstellung einen Abstandsbereich (padding) hat, der dafür sorgt, dass der Text mit ein paar Pixel Abstand von der oberen linken Ecke gerendert wird. Dieses ist nicht der Fall beim TextBlock Steuerelement, bei dem dieser manuell angegeben werden muss.
In einem einfachen Fall wie diesem, bei dem der Inhalt einfach aus einer Zeichenkette besteht, wird das Label selbstständig einen TextBlock erzeugen und in diesem die Zeichenkette anzeigen.
Das Label Steuerelement im Vergleich zum TextBlock Steuerelement
Warum soll man nun überhaupt das Label Steuerelement verwenden? Nun, es gibt einige wichtige Unterschiede zwischen Label und TextBlock. Der TextBlock erlaubt ausschließlich eine Text-Zeichenkette zu rendern, während das Label noch folgende weitere Möglichkeiten bietet:
- einen Rand festlegen
- andere Steuerelemente zu rendern, zum Beispiel ein Bild-Objekt
- einen Vorlageninhalt durch die ContentTemplate-Eigenschaft einzusetzen
- das Nutzen von Steuertasten, um verbundenen Steuerelementen den Fokus zu übertragen
Der letzte Punkt ist tatsächlich einer der Hauptgründe, ein Label einem TextBlock vorzuziehen. Wann immer man einen einfachen Text rendern will, sollte man das TextBlock Steuerelement verwenden, da es ressourcenschonender ist und damit in den meisten Fällen besser als das Label performt.
Label und Zugriffstasten (mnemonics)
Im Windows und anderen Betriebssystemen auch ist eine gängige Technik, Steuerelemente in Dialogen zu nutzen, in dem man die [Alt]-Taste gedrückt halt und dann ein dem Steuerelement zugeordnetes Zeichen drückt.
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Content="_Name:" Target="{Binding ElementName=txtName}" />
<TextBox Name="txtName" />
<Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />
<TextBox Name="txtMail" />
</StackPanel>
</Window>
Das Bildschirmfoto zeigt unser Beispiel, wie es aussieht, wenn die Alt-Taste gedrückt wird. Probieren Sie es aus, indem Sie die [Alt]-Taste gedrückt halten und dann N und M drücken. Sie werden sehen, wie der Fokus zwischen beiden TextBoxen verschoben wird.
Somit gibt es hier neue Dinge zu lernen. Zum ersten definieren wir eine Zugriffstaste durch das Schreiben eines Unterstrichs (_) vor dem Textzeichen. Es muss nicht das ersten Zeichen sein, es kann vor jedem Zeichen in Ihrem Label-Inhaltsfeld stehen. Die gängige Praxis ist es, das erste Zeichen zu verwenden, welches nicht bereits für ein anderes Steuerelement verwendet wurde.
Wir nutzen die Target-Eigenschaft, um das Label mit dem zugeordneten Steuerelement zu verbinden. Wir nutzen ein Standard WPF Binding dafür, basierend auf der ElementName-Eigenschaft, dazu werden wir alles wichtige später in diesem Kapitel beschreiben. Das Binding hängt am Namen des Steuerelements, wenn Sie also diesen Namen ändern, müssen Sie auch daran denken, das Binding anzupassen.
Steuerelemente als Label-Inhalt verwenden
Wie schon zuvor erwähnt, erlaubt es das Label-Steuerelement, andere Steuerelemente in sich aufzunehmen, und zugleich die anderen Vorteile beizubehalten. Lassen Sie uns ein Beispiel betrachten, bei dem wir ein Bild und einen Text innerhalb des Labels haben und zudem eine Zugriffstaste für jedes Label definiert wurde.
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlAdvancedSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Target="{Binding ElementName=txtName}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
<AccessText Text="_Name:" />
</StackPanel>
</Label>
<TextBox Name="txtName" />
<Label Target="{Binding ElementName=txtMail}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
<AccessText Text="_Mail:" />
</StackPanel>
</Label>
<TextBox Name="txtMail" />
</StackPanel>
</Window>
Dieses ist einfach eine erweiterte Version des vorangegangenen Beispiels - statt einer einfachen Zeichenkette trägt unser Label nun ein Bild und einen Text in sich (innerhalb des AccessText- Steuerelementes, welches uns zudem erlaubt, eine Zugriffstaste für das Label zu nutzen). Beide Steuerelemente sind innerhalb eines horizontal ausgerichteten StackPanel, da das Label genau wie jedes andere IContenControl-Element immer nur ein direktes Kind Kontrollelement enthalten kann.
Das Image-Kontrollelement, später in diesem Tutorial beschrieben, nutzt ein remote gespeichertes Bild - dieses NUR für Demonstrationszwecke und ist KEINE gute Idee in den meisten Produktionsanwendungen.
Zusammenfassung
In den meisten Situationen macht das Label Steuerelement genau das, was der Name nahelegt: Es dient als Textdarstellung für ein anderes Steuerelement. Dies ist seine hauptsächliche Aufgabe, In den meisten anderen Fällen sollten Sie ein TextBlock Steuerelement einsetzen oder einen der anderen Textcontainer, die WPF bietet.