Multilínea para WPF TextBox


364

Estoy desarrollando una aplicación para enviar algunos comentarios.

Básicamente estoy tratando de hacer TextBoxcomentarios, pero estoy acostumbrado a los WinForms MultiLine=true. Lo configuré MinLinesen 3, que es llegar allí, pero preferiblemente me gustaría que el usuario pueda escribir en cualquier parte de este bloque, como presionar enter y hacer puntos de punto. Por ejemplo:

- Item 1        blah
- Item 2                blahlb lahbvl   d

Pero en este momento todo el texto permanece en una línea.

- Item 1         blah - Item 2                      blahb blahb blah

Estos comentarios ayudarán a llenar el cuerpo de un correo electrónico que se envía. Puede no tener sentido si no puedo mantener fácilmente el mismo formato al colocar esta cadena en la cadena del cuerpo del correo electrónico (de modo que parezca que lo hace cuando se envía como lo hace cuando se escribe).

¿Puedo lograr lo que busco o debo dejarlo como texto en una línea?

Respuestas:


757

Habilite TextWrapping="Wrap"y AcceptsReturn="True"en su TextBox.

También es posible que desee habilitar AcceptsTaby SpellCheck.IsEnabledtambién.


1
Hola, @itowlson, si creo un cuadro de texto de varias líneas con su método, funciona mejor, pero si quiero establecer el contador de texto del cuadro de texto label1.Content = textBox1.Text.Length;con esta línea, funciona, pero cuando presiono Intro en el contador de cuadro de texto aumentará 2 caracteres. ¿Cómo puedo hacer esta tarea? Por favor, ayúdame.
Jay Shukla

2
Esto sucede porque la nueva línea tiene dos caracteres (CR / LF). Si quieres tratarlo como un solo personaje, haz algo como textBox1.Text.Replace("\r\n", " ").Length. Sin embargo, tenga cuidado: si esto se entiende como retroalimentación del usuario porque su back-end limita el número de caracteres, es posible que deba contar el CR / LF como dos caracteres si así es como lo contará el back-end.
itowlson

También pregunto este problema en este enlace stackoverflow.com/questions/18459908/…
Jay Shukla

1
También asegúrese de que VerticalContentAlignment esté configurado en Estirar
eran otzap

1
Agregue también el componente ScrollVewer circundante para tener una barra de desplazamiento.
Borko Djurovic

34

Además, si, como yo, agrega controles directamente en XAML (sin usar el editor), puede sentirse frustrado de que no se extienda a la altura disponible, incluso después de establecer esas dos propiedades.

Para hacer que TextBox se estire, configure el Height="Auto".

ACTUALIZAR:

En retrospectiva, creo que esto debe haber sido necesario gracias a un estilo predeterminado para TextBoxes que especifica la altura a algún estándar para la aplicación en algún lugar de los recursos de la aplicación. Puede valer la pena comprobar esto si esto te ayudó.


19

Aquí está la muestra XAMLque permitirá TextBoxaceptar texto multilínea y usa sus propias barras de desplazamiento:

<TextBox
Height="200"
Width="500"
TextWrapping="Wrap"
AcceptsReturn="True"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"/>

12

Al contrario de @Andre Luus, la configuración Height="Auto"no hará el TextBoxestiramiento. La solución que encontré fue establecerVerticalAlignment="Stretch"


1
El valor predeterminado para 'VerticalAlignment' es 'Stretch', consulte MSDN . Y sí, realmente funcionó para mí. Sin embargo, podría depender del control en el que colocó el cuadro de texto, ¿era algo no estándar?
Andre Luus

1
Otra posibilidad es que tenga un estilo predeterminado para cuadros de texto definidos en algún lugar del ámbito de ese cuadro de texto que definió un valor diferente para VerticalAlignment. Lo consultaría con Snoop.
Andre Luus

1
Si el contenedor es fijo, la altura automática no funcionará. Cada contenedor principal a la parte superior debe poder expandirse. Envolver en una barra de desplazamiento también funciona.
Lee Louviere

5

La única propiedad correspondiente en WPF a la

Propiedad Winforms :TextBox.Multiline = true

Es la WPF propiedad: TextBox.AcceptsReturn = true.

<TextBox AcceptsReturn="True" ...... />

Todas las demás configuraciones, como VerticalAlignement, WordWrapetc., solo controlan cómo interactúa TextBox en la interfaz de usuario, pero no afecta el Multilinecomportamiento.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.