2010-04-16 4 views
284

Sto sviluppando un app per l'invio di un feedback.multilinea per WPF TextBox

Fondamentalmente sto cercando di creare un TextBox per i commenti, ma sono abituato a WinForms MultiLine=true. Ho impostato MinLines-3, che è sempre lì, ma preferibilmente mi piacerebbe che se l'utente è in grado di digitare ovunque in questo blocco - come premere invio e fare punti dot genere di cose. Ad esempio:

- Item 1  blah 
- Item 2    blahlb lahbvl d 

Ma al momento il testo rimane tutto su una riga.

- Item 1   blah - Item 2      blahb blahb blah 

Questi commenti aiuteranno quindi a riempire il corpo di un'email inviata. Potrebbe essere inutile se non riesco a mantenere facilmente la stessa formattazione quando inserisco questa stringa nella stringa del corpo dell'e-mail (in modo che assomigli a quando viene inviata così com'è quando viene digitata).

Posso ottenere quello che sto cercando o devo lasciare come tutto il testo su una riga?

risposta

607

Abilitare TextWrapping="Wrap" e AcceptsReturn="True" sul TextBox.

Si potrebbe anche voler abilitare AcceptsTab e SpellCheck.IsEnabled.

+1

hey @itowlson se la creazione di testo multilinea con il suo metodo lavorare meglio, ma se voglio impostare testo contatore testo 'label1.Content = textBox1.Text.Length,' con questa linea il suo lavoro, ma quando si preme entrare nel contatore testo aumenterà 2 caratteri. come posso fare questo compito, per favore aiutatemi. –

+2

Ciò accade perché la nuova riga è composta da due caratteri (CR/LF). Se vuoi trattarlo come un singolo carattere, fai qualcosa come 'textBox1.Text.Replace (" \ r \ n "," ") .Length'. Attenzione però: se questo è inteso come feedback degli utenti perché il tuo back end limita il numero di personaggi, potresti dover contare il CR/LF come due personaggi se è così che il back-end lo conterà! – itowlson

+0

Ho anche chiesto questo problema in questo collegamento http://stackoverflow.com/questions/18459908/multiline-issue-wpf-textbox –

29

Inoltre, se, come me, si aggiungono controlli direttamente in XAML (non si utilizza l'editor), si potrebbe essere frustrati dal fatto che non si estenderà all'altezza disponibile, anche dopo aver impostato queste due proprietà.

Per rendere il tratto TextBox, impostare il Height="Auto".

UPDATE:

Col senno di poi, credo che questo deve essere stato necessarie grazie ad uno stile predefinito per TextBoxes che specifica l'altezza di alcuni standard per l'applicazione da qualche parte nelle risorse App. Potrebbe essere utile controllarlo se questo ti ha aiutato.

8

Contrariamente a @Andre Luus, l'impostazione Height="Auto" non rende lo stiramento TextBox. La soluzione che ho trovato è stato quello di impostare VerticalAlignment="Stretch"

+1

Il valore predefinito per * 'VerticalAlignment' è * 'Stretch' [riferimento MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.verticalalignment.aspx). E sì, ha funzionato davvero per me. Potrebbe dipendere dal controllo in cui hai inserito la casella di testo, era qualcosa di non standard? –

+1

Un'altra probabilità è che si disponga di uno stile predefinito per le caselle di testo definite da qualche parte nell'ambito di tale TextBox che ha definito un valore diverso per VerticalAlignment. Vorrei controllare con Snoop. –

+0

La risposta di Andre sopra ha funzionato per me. – HullCitySteve

5

Ecco il campione XAML che permetterà TextBox di accettare testo su più righe e usa le sue proprie barre di scorrimento:

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