TOC

This article has been localized into Spanish by the community.

Controles básicos:

El control TextBox

El control TextBox es el control más básico para introducir texto en WPF, permitiendo al usuario final escribir texto plano en una sola línea para un formulario o como múltiples líneas como en un editor de texto.

TextBox de una sola línea

El control TextBox es algo tan usado que de hecho no tendrás que usar propiedades en él para tener un campo de texto funcional. Aquí hay un ejemplo

<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>

Eso es todo lo que se necesita para obtener un campo de texto. Agregué el texto después de ejecutar el ejemplo y antes de tomar la captura de pantalla, pero también se puede conseguir lo mismo utilizando el markup para llenar de previo el texto utilizando la propiedad Text.

<TextBox Text="Hello, world!" />

Intente hacer clic derecho en el TextBox. Le aparecerá un menú con opciones permitiendo usar el TextBox con el Portapapeles de Windows. Las teclas de acceso directo por defecto para deshacer y rehacer (Ctrl+Z y Ctrl+Y) también deben funcionar. ¡Toda esta funcionalidad es gratuita!

TextBox multi línea

Si ejecuta el ejemplo de arriba, notará que el control TextBox por defecto es un control de una sola línea de texto. Nada sucede si presiona la tecla Enter. Si agrega más texto que el que cabe en una sola línea, el control se desplaza. Sin embargo, convertir el TextBox a multi línea es muy sencillo.

<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>

He agregado dos propiedades: la propiedad AcceptsReturn convierte el TextBox en un control multi-línea permitiendo el uso de la tecla Enter/Return para ir a la siguiente línea. La propiedad TextWrapping hace el el texto continúe en la siguiente línea una vez que alcanza el final de una línea.

Revisión ortográfica con TextBox

Como bono adicional, el control TextBox provee revisión automática de ortografía para Inglés y un par de otros lenguajes (al momento de escribir este artículo, Inglés, Francés, Alemán y Español son lenguajes soportados).

Funciona igual a Microsoft Word, donde los errores ortográficos son subrayados y puede hacer clic derecho para alternativas sugeridas. Habilitar la revisión ortográfica es muy sencillo:

<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>

Hemos usado el ejemplo previo de un TextBox multi-línea como base y hemos agregado dos nuevas propiedades: la propiedad de la clase SpellCheck llamada IsEnabled habilita la revisión ortográfica en el control y la propiedad Language le indica al revisor ortográfico que lenguaje utilizar.

Trabajando con selecciones en el TextBox

Como cualquier otro control editable en Windows, el TextBox permite la selección de texto; por ejemplo, para borrar una palabra completa o para copiar texto al portapapeles. El control TextBox de WPF posee ciertas propiedades para trabajar con el texto seleccionado, todas ellas son modificables. En el siguiente ejemplo veremos estas propiedades:

<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>

El ejemplo consiste de dos controles TextBox: uno para edición y otro para salida del texto seleccionado. Para esto, indicamos la propiedad IsReadOnly en true, para prevenir la edición del TextBox. Nos subscribimos al evento SelectionChanged on el primer TextBox que se maneja en el 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 + "'";
		}
	}
}

Usamos tres propiedades interesantes para lograr esto:

SelectionStart, la cual nos brinda la posición actual del cursor o, si hay texto seleccionado, donde éste inicia.

SelectionLength, nos brinda la longitud del texto seleccionado si hubiere. Sino, solo retorna 0.

SelectedText, nos retorna el texto seleccionado si lo hubiere. Sino, se retorna un texto vacío.

Modificando la selección

Todas estas propiedades son leíbles y editables lo que significa que puede modificarlas. Por ejemplo, puede indicar la propiedad SelectionStart y SelectionLength para seleccionar un rango de texto personalizado o puede utilizar la propiedad SelectedText para insertar y seleccionar un string. Solo recuerde que el TextBox debe tener el focus; por ejemplo, llamdn eo método Focus() para que ésto funcione.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!