2010-04-16 23 views
284

Estoy desarrollando una aplicación para enviar comentarios.Multilínea para WPF TextBox

Básicamente estoy tratando de hacer un TextBox para comentarios, pero estoy acostumbrado a los WinForms MultiLine=true. Establecí MinLines en 3, que está llegando, pero preferiblemente me gustaría que el usuario pueda escribir en cualquier lugar de este bloque, como presionar enter y do puntos puntos. Por ejemplo:

- Item 1  blah 
- Item 2    blahlb lahbvl d 

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

- Item 1   blah - Item 2      blahb blahb blah 

Estos comentarios ayudarán a completar el cuerpo de un correo electrónico que se envía. Puede ser inútil si no puedo mantener fácilmente el mismo formato al colocar esta cadena en la cadena del cuerpo del correo electrónico (para que se vea como lo hace cuando se envía como lo hace cuando se escribe).

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

Respuesta

607

Habilite TextWrapping="Wrap" y AcceptsReturn="True" en su TextBox. Es posible que también desee habilitar AcceptsTab y SpellCheck.IsEnabled.

+1

bueno @itowlson si la creación de cuadro de texto de varias líneas con la forma de su funcionan mejor, pero si quiero establecer el contador de texto de la caja de texto 'label1.Content = textBox1.Text.Length;' con esta línea su trabajo, pero cuando presiono enter en el contador de la caja de texto aumentará 2 caracteres. ¿Cómo puedo hacer esta tarea? Por favor, ayúdenme. –

+2

Esto sucede porque la nueva línea tiene dos caracteres (CR/LF). Si desea tratarlo como un solo carácter, haga 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, puede que necesite contar el CR/LF como dos caracteres si así es como lo contará el back-end. – itowlson

+0

También solicito este problema en este enlace http://stackoverflow.com/questions/18459908/multiline-issue-wpf-textbox –

29

Además, si, como yo, agregas controles directamente en XAML (sin usar el editor), es posible que te frustres de que no llegue a la altura disponible, incluso después de establecer esas dos propiedades.

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

ACTUALIZACIÓN:

En retrospectiva, creo que esto debe haber sido gracias necesarias a un estilo predeterminado de cuadros de texto que especifica la altura a alguna norma para la aplicación en alguna parte de los recursos de la aplicación. Puede valer la pena verificar esto si esto te ayudó.

8

Contrariamente a @Andre Luus, la configuración Height="Auto" no hará que el tramo TextBox sea elástico. La solución que encontré fue establecer VerticalAlignment="Stretch"

+1

El valor predeterminado para 'VerticalAlignment' * es * 'Stretch' [referir a MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.verticalalignment.aspx). Y sí, realmente funcionó para mí. Sin embargo, podría depender del control en el que colocaste el cuadro de texto, ¿era algo no estándar? –

+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. Verificaría con Snoop. –

+0

La respuesta de Andre anterior funcionó para mí. – HullCitySteve

5

Aquí está la muestra XAML que permitirá TextBox a aceptar el texto de varias líneas y que usa su propia barras de desplazamiento:

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