This article has been localized into German by the community.
Das TextBox Steuerelement
Das TextBox-Steuerelement ist das am meisten genutzte Eingabefeld in der WPF, welches dem Anwender erlaubt Text sowohl in einer Zeile (Dialog), als auch in mehreren Zeilen (wie in einem Editor) zu schreiben.
Die einzeilige TextBox
Das TextBox-Steuerelement ist ein sehr häufig eingesetztes Werkzeug, so dass Sie tatsächlich nicht einmal irgendwelche Eigenschaften setzen müssen, um ein vollwertig editierbares Textfeld zu haben. Hier ist ein ganz einfaches Beispiel:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSample" Height="80" Width="250">
<StackPanel Margin="10">
<TextBox />
</StackPanel>
</Window>
Das ist alles, was Sie brauchen, um ein Texteingabefeld zu bekommen. Ich fügte den Text nach dem Ausführen des Beispiels und vor dem Bildschirmfoto hinzu , aber Sie können dies auch durch eine Vorbelegung tun, durch die Text-Eigenschaft.
<TextBox Text="Hello, world!" />
Versuchen Sie einen Rechts-Klick in der TextBox. Sie bekommen ein Optionsmenü, welches es Ihnen erlaubt, die TextBox mit der Windows-Zwischenablage zu verwenden. Die Standard Tastaturbelegungen für Undo und Redo (Ctrl+Z und Ctrl+Y) sollten auch funktionieren, und all diese Funktionalität bekommen Sie quasi kostenlos!
Die mehrzeilige TextBox
Wenn Sie das oben gezeigte Beispiel ausführen, erkennen Sie, dass die TextBox als Standard immer nur eine Zeile hat. Es passiert nichts, wenn Sie die Return-Taste drücken. Wenn Sie mehr Text eingeben, als in die eine Zeile passt, beginnt der Inhalt der TextBox zu scrollen. Es ist allerdings sehr einfach die TextBox als einen mehrzeiligen Editor zu nutzen:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSample" Height="160" Width="280">
<Grid Margin="10">
<TextBox AcceptsReturn="True" TextWrapping="Wrap" />
</Grid>
</Window>
Ich habe zwei Eigenschaften (properties) hinzugefügt: Das AcceptsReturn macht die TextBox zu einem mehrzeiligen Editor, indem es dem Anwender erlaubt die Enter/Return Taste zu nutzen um einen Zeilenumbruch durchzuführen. Die Eigenschaft TextWrapping bricht den Text automatisch um, wenn die Eingabe das Ende einer Zeile erreicht.
Rechtschreibprüfung mit der TextBox
Als Zusatzbonus kann die TextBox mit einer automatischen Rechtschreibprüfung versehen werden. Zur Zeit, als dieser Artikel geschrieben wurde, werden die Sprachen: Englisch, Französisch, Deutsch und Spanisch unterstützt.
Das funktioniert ähnlich wie in Microsoft Word, in dem die Rechtschreibfehler rot unterstrichen werden. Man kann sich mit einem Klick der rechten Maustaste Alternativen vorschlagen lassen. Die Aktivierung der Rechtschreibprüfung ist sehr einfach:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSample" Height="160" Width="280">
<Grid Margin="10">
<TextBox AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
</Grid>
</Window>
Wir haben das vorangegangen Beispiel der mehrzeiligen TextBox als Basis genutzt und zwei neue Eigenschaften hinzugefügt: Die Eigenschaft IsEnabled der Klasse SpellCheck wurde aktiviert und die Eigenschaft Language wurde hinzugefügt. Wenn Sie eine deutsche Rechtschreibprüfung nutzen wollen, muss die Eigenschaft auf "de-DE" gesetzt werden.
Mit Auswahlen in der TextBox arbeiten
Wie alle anderen editierbaren Controls in Windows erlaubt auch die TextBox selektierte Worte oder Textpassagen zu markieren. Diese Auswahlen können dann gelöscht oder in die Zwischenablage kopiert werden. Die WPF TextBox hat mehrere Eigenschaften, um mit ausgewähltem Text zu arbeiten. Jede dieser Eigenschaften kann ausgelesen oder sogar geändert werden. In dem nächsten Beispiel werden wir solche Eigenschaften auslesen:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSelectionSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBoxSelectionSample" Height="150" Width="300">
<DockPanel Margin="10">
<TextBox SelectionChanged="TextBox_SelectionChanged" DockPanel.Dock="Top" />
<TextBox Name="txtStatus" AcceptsReturn="True" TextWrapping="Wrap" IsReadOnly="True" />
</DockPanel>
</Window>
Das Beispiel besteht aus zwei TextBoxen: Die Erste um Text einzugeben, die Zweite um den aktuellen Status der Selektion auszugeben. Aus diesem Grund setzen wir in der zweiten TextBox die Eigenschaft IsReadOnly auf true. So kann diese TextBox nicht editiert werden. Wir bilden das Ereignis SelectionChanged der ersten TextBox auf eine Methode im Code-behind ab. Hier ist der Code-behind:
using System;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace WpfTutorialSamples.Basic_controls
{
public partial class TextBoxSelectionSample : Window
{
public TextBoxSelectionSample()
{
InitializeComponent();
}
private void TextBox_SelectionChanged(object sender, RoutedEventArgs e)
{
TextBox textBox = sender as TextBox;
txtStatus.Text = "Selection starts at character #" + textBox.SelectionStart + Environment.NewLine;
txtStatus.Text += "Selection is " + textBox.SelectionLength + " character(s) long" + Environment.NewLine;
txtStatus.Text += "Selected text: '" + textBox.SelectedText + "'";
}
}
}
Wir nutzen drei interessante Eigenschaften, um das gewünschte Ergebnis zu erzielen:
SelectionStart: diese Eigenschaft gibt uns die aktuelle Cursor Position oder, wenn es eine Auswahl gibt, die Position wieder, an der der ausgewählte Text beginnt.
SelectionLength: diese Eigenschaft gibt uns die Länge der aktuellen Auswahl. Ist kein Text ausgewählt, gibt diese Eigenschaft 0 zurück.
SelectedText: diese Eigenschaft gibt uns den ausgewählten Text zurück. Ist kein Text ausgewählt, ist der zurückgegebene String leer.
Die Auswahl ändern
All diese Eigenschaften sind sowohl lesbar als auch schreibbar. Das bedeutet, dass man sie auch zur Laufzeit ändern kann. So kann man zum Beispiel die Eigenschaft SelectionStart und SelectionLength nutzen um einen Textausschnitt in der TextBox auszuwählen. Oder man kann die Eigenschaft SelectedText nutzen, um Text einzusetzen und auszuwählen. Zu beachten ist, dass bei der Änderung dieser Eigenschaften die TextBox den Focus haben muss. Dies kann man erreichen, in dem man die Methode Focus() der TextBox aufruft.