web-dev-qa-db-fra.com

Multiligne pour WPF TextBox

Je développe une application pour envoyer des commentaires.

En gros, j'essaie de créer un TextBox pour les commentaires, mais je suis habitué à WinForms MultiLine=true. J'ai réglé MinLines sur 3, ce qui est en train de se faire, mais de préférence j'aimerais que l'utilisateur puisse taper n'importe où dans ce bloc - comme pour appuyer sur entrée et faire une sorte de point. Par exemple:

- Item 1        blah
- Item 2                blahlb lahbvl   d

Mais pour le moment tout le texte reste sur une ligne.

- Item 1         blah - Item 2                      blahb blahb blah

Ces commentaires aideront ensuite à remplir le corps d'un email qui est envoyé. Cela peut être inutile si je ne parviens pas facilement à conserver le même format lors de l'insertion de cette chaîne dans la chaîne du corps de l'e-mail (afin qu'elle ressemble à ce qu'elle est lors de son envoi comme lors de sa saisie).

Puis-je obtenir ce que je recherche ou dois-je le laisser comme tout le texte sur une ligne?

339
baron

Activez TextWrapping="Wrap" et AcceptsReturn="True" sur votre TextBox.

Vous pouvez également vouloir activer AcceptsTab et SpellCheck.IsEnabled.

711
itowlson

De même, si, comme moi, vous ajoutez des contrôles directement dans XAML (sans utiliser l'éditeur), vous pourriez être frustré qu'il ne s'étire pas à la hauteur disponible, même après la définition de ces deux propriétés.

Pour étirer la zone de texte, définissez le Height="Auto".

PDATE:

Rétrospectivement, je pense que cela a dû être nécessaire grâce à un style par défaut pour les zones de texte spécifiant la hauteur à une certaine norme pour l'application quelque part dans les ressources de l'application. Cela vaut la peine de vérifier si cela vous a aidé.

34
Andre Luus

Voici l'exemple XAML qui permettra à TextBox d'accepter du texte multiligne et utilise ses propres barres de défilement:

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

Contrairement à @Andre Luus, le réglage de Height="Auto" ne rendra pas la TextBox étendue. La solution que j'ai trouvée consistait à définir VerticalAlignment="Stretch"

11
Elkvis

La seule propriété correspondant dans WPF à la propriété Winforms TextBox.Multiline = true est TextBox.AcceptsReturn = true.

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

Tous les autres paramètres, tels que VerticalAlignement, WordWrap etc., ne contrôlent que la façon dont la zone de texte interagit dans l'interface utilisateur, mais n'affectent pas le comportement Multiline.

1
marsh-wiggle