Multilinea per WPF TextBox


364

Sto sviluppando un'app per inviare un feedback.

Fondamentalmente sto cercando di fare un TextBoxcommento, ma sono abituato a WinForms MultiLine=true. Ho impostato MinLines3, che ci sta arrivando, ma preferibilmente mi piacerebbe se l'utente fosse in grado di digitare ovunque in questo blocco - come premere invio e fare punti punti in qualche modo. Per 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'e-mail che viene inviata. Può essere inutile se non riesco facilmente a mantenere la stessa formattazione quando inserisco questa stringa nella stringa del corpo dell'email (in modo che sembri che faccia quando viene inviata come quando viene digitata).

Posso ottenere ciò che sto cercando o devo lasciarlo come tutto il testo su una riga?

Risposte:


757

Abilita TextWrapping="Wrap"e AcceptsReturn="True"sul tuo TextBox.

Potresti anche voler abilitare AcceptsTabe SpellCheck.IsEnabledanche.


1
hey @itowlson se creo una casella di testo multilinea con il tuo metodo funziona meglio ma se voglio impostare il contatore del testo della casella label1.Content = textBox1.Text.Length;con questa riga funziona, ma quando premo invio nel contatore della casella di testo aumenterò di 2 caratteri. come posso fare questo compito per favore aiutami.
Jay Shukla,

2
Ciò accade perché la nuova riga ha due caratteri (CR / LF). Se vuoi trattarlo come un singolo personaggio, fai qualcosa di simile textBox1.Text.Replace("\r\n", " ").Length. Fai attenzione però: se questo è inteso come feedback degli utenti perché il tuo back-end limita il numero di caratteri, potrebbe essere necessario contare CR / LF come due caratteri se è così che il back-end lo conterà!
itowlson,

Chiedo anche questo problema in questo link stackoverflow.com/questions/18459908/…
Jay Shukla,

1
Assicurati inoltre che VerticalContentAlignment sia impostato su Stira
eran otzap l'

1
Aggiungi anche il componente ScrollVewer circostante per avere la barra di scorrimento.
Borko Djurovic,

34

Inoltre, se, come me, aggiungi controlli direttamente in XAML (non utilizzando l'editor), potresti essere frustrato dal fatto che non si estenda all'altezza disponibile, anche dopo aver impostato queste due proprietà.

Per allungare TextBox, impostare il Height="Auto".

AGGIORNARE:

In retrospettiva, penso che questo debba essere stato necessario grazie a uno stile predefinito per TextBox che specifica l'altezza di alcuni standard per l'applicazione da qualche parte nelle risorse dell'app. Potrebbe essere utile verificarlo se questo ti è stato di aiuto.


19

Ecco l'esempio XAMLche consentirà TextBoxdi accettare il testo multilinea e utilizza le sue barre di scorrimento:

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

12

Contrariamente a @Andre Luus, l'impostazione Height="Auto"non farà il TextBoxtratto. La soluzione che ho trovato è stata quella di impostareVerticalAlignment="Stretch"


1
Il valore predefinito per "VerticalAlignment" è "Stretch", fare riferimento a MSDN . E sì, ha funzionato davvero per me. Potrebbe dipendere dal controllo in cui hai inserito la casella di testo, era qualcosa di non standard?
Andre Luus,

1
Un'altra probabilità è che tu abbia uno stile predefinito per le caselle di testo definite da qualche parte nell'ambito di quella TextBox che ha definito un valore diverso per VerticalAlignment. Vorrei verificare con Snoop.
Andre Luus,

1
Se il contenitore è fisso, l'altezza auto non funzionerà. Ogni contenitore padre verso l'alto deve essere in grado di espandersi. Anche l'avvolgimento in una barra di scorrimento funziona.
Lee Louviere,

5

L' unica proprietà corrispondente in WPF a

Proprietà Winforms :TextBox.Multiline = true

è il WPF di proprietà: TextBox.AcceptsReturn = true.

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

Tutte le altre impostazioni, come VerticalAlignement, WordWrapecc., Controllano solo il modo in cui TextBox interagisce nell'interfaccia utente ma non influisce sul Multilinecomportamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.