388 votes

Multiline pour WPF TextBox

Je suis en train de développer une application pour envoyer des commentaires.

En gros, j'essaie de faire un TextBox pour les commentaires, mais je suis habitué à la WinForms MultiLine=true . J'ai mis MinLines à 3, ce qui est en train de se faire, mais je préférerais que l'utilisateur puisse taper n'importe où dans ce bloc - comme appuyer sur la touche Entrée et faire des points, par exemple. Par exemple :

- Item 1        blah
- Item 2                blahlb lahbvl   d

Mais pour l'instant, le texte reste sur une seule ligne.

- Item 1         blah - Item 2                      blahb blahb blah

Ces commentaires contribueront ensuite à remplir le corps d'un courriel qui est envoyé. Cela ne sert peut-être à rien si je ne peux pas facilement conserver le même formatage lorsque je place cette chaîne dans le corps du message électronique (pour qu'elle ressemble à ce qu'elle est lorsqu'elle est envoyée et lorsqu'elle est tapée).

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

807voto

itowlson Points 44174

Activer TextWrapping="Wrap" y AcceptsReturn="True" sur votre TextBox.

Vous pourriez également souhaiter activer AcceptsTab y SpellCheck.IsEnabled aussi.

1 votes

Hey @itowlson si je crée une zone de texte multi-ligne avec votre méthode, cela fonctionne mieux mais si je veux définir le compteur de texte de la zone de texte, je ne peux pas le faire. label1.Content = textBox1.Text.Length; avec cette ligne, ça marche mais quand j'appuie sur entrée dans la zone de texte, le compteur augmente de 2 caractères. comment puis-je faire cette tâche, s'il vous plaît aidez-moi.

1 votes

Assurez-vous également que VerticalContentAlignment est réglé sur Stretch.

1 votes

Ajoutez également le composant ScrollVewer environnant afin d'avoir une barre de défilement.

35voto

Andre Luus Points 1603

En outre, si, comme moi, vous ajoutez des contrôles directement dans XAML (sans utiliser l'éditeur), vous risquez d'être frustré par le fait qu'ils ne s'étirent pas à la hauteur disponible, même après avoir défini ces deux propriétés.

Pour que la TextBox s'étire, définissez le paramètre Height="Auto" .

UPDATE :

En rétrospective, je pense que cela a dû être nécessaire grâce à un style par défaut pour les boîtes de texte spécifiant la hauteur à une certaine norme pour l'application quelque part dans les ressources de l'application. Il peut être utile de vérifier cela si cela vous a aidé.

30voto

FireFalcon Points 363

En voici un exemple XAML qui permettra TextBox pour accepter du texte multiligne et il utilise ses propres barres de défilement :

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

12voto

boboes Points 616

El seule propriété correspondant dans WPF à la

Winforms propriété : TextBox.Multiline = true

est le WPF propriété : TextBox.AcceptsReturn = true .

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

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

12voto

Elkvis Points 79

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

1 votes

La valeur par défaut de "VerticalAlignment". est "Stretch consultez MSDN . Et oui, ça a vraiment marché pour moi. Cela dépend peut-être du contrôle dans lequel vous avez placé la zone de texte, s'agit-il d'un contrôle non standard ?

1 votes

Il est également possible que vous ayez défini un style par défaut pour les zones de texte, quelque part dans la portée de cette zone de texte, qui a défini une valeur différente pour l'alignement vertical. Je vérifierais avec Snoop.

1 votes

Si le conteneur est fixe, la hauteur automatique ne fonctionnera pas. Chaque conteneur parent du haut doit pouvoir s'étendre. L'encapsulation dans une barre de défilement fonctionne également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X