J'ai un TextBlock
dans WPF. Je lui écris de nombreuses lignes, dépassant de loin sa hauteur verticale. Je m'attendais à ce qu'une barre de défilement verticale apparaisse automatiquement lorsque cela se produit, mais ce n'est pas le cas. J'ai essayé de rechercher une propriété de barre de défilement dans le volet Propriétés, mais je n'en ai pas trouvé.
Comment puis-je créer une barre de défilement verticale créée automatiquement pour mon TextBlock
une fois que son contenu dépasse sa hauteur?
Précision: je préfère le faire par le concepteur et non en écrivant directement sur le XAML.
TextBlock
deux fois etTextBox
une fois.Réponses:
Enveloppez-le dans une visionneuse à défilement:
REMARQUE cette réponse s'applique à un
TextBlock
(un élément de texte en lecture seule) comme demandé dans la question d'origine.Si vous souhaitez afficher les barres de défilement dans un
TextBox
(un élément de texte modifiable), utilisez lesScrollViewer
propriétés jointes:Les valeurs valides pour ces deux propriétés sont
Disabled
,Auto
,Hidden
etVisible
.la source
TextBlock
pasTextBox
.peut utiliser les éléments suivants maintenant:
la source
TextBlock
pasTextBox
(comme dans le titre et la première ligne), mais le deuxième paragraphe mentionnéTextBox
. Pour être clair, cette réponse est certainement la meilleure approche pour les zones de texte , et la mienne est la meilleure que je connaisse pour les blocs de texte :)Quelque chose de mieux serait:
Cela garantit que le texte de votre bloc de texte ne déborde pas et ne chevauche pas les éléments situés sous le bloc de texte, comme cela peut être le cas si vous n'utilisez pas la grille. Cela m'est arrivé lorsque j'ai essayé d'autres solutions même si le bloc de texte était déjà dans une grille avec d'autres éléments. Gardez à l'esprit que la largeur du bloc de texte doit être Auto et vous devez spécifier le souhaité avec dans l'élément Grille. Je l'ai fait dans mon code et cela fonctionne à merveille. HTH.
la source
C'est une façon d'utiliser le défilement TextBox en XAML et de l'utiliser comme zone de texte.
la source
TextBlock
nonTextBox
.Cette réponse décrit une solution utilisant MVVM.
Cette solution est idéale si vous souhaitez ajouter une boîte de journalisation à une fenêtre, qui défile automatiquement vers le bas chaque fois qu'un nouveau message de journalisation est ajouté.
Une fois ces propriétés attachées ajoutées, elles peuvent être réutilisées n'importe où, ce qui en fait un logiciel très modulaire et réutilisable.
Ajoutez ce XAML:
Ajoutez cette propriété attachée:
Et cette propriété jointe (pour vider la case):
Ensuite, si vous utilisez un framework d'injection de dépendances tel que MEF, vous pouvez placer tout le code spécifique à la journalisation dans son propre ViewModel:
Voici comment ça fonctionne:
la source
Je fais cela d'une autre manière en mettant MaxHeight dans ScrollViewer.
Ajustez simplement le MaxHeight pour afficher plus ou moins de lignes de texte. Facile.
la source
Vous pouvez utiliser
Ce sont des propriétés jointes de wpf. Pour plus d'informations
http://wpfbugs.blogspot.in/2014/02/wpf-layout-controls-scrollviewer.html
la source
J'ai essayé de faire fonctionner ces suggestions pour un bloc de texte, mais je n'ai pas réussi à le faire fonctionner. J'ai même essayé de le faire fonctionner chez le designer. (Regardez dans Layout et développez la liste en cliquant sur la flèche vers le bas "V" en bas) J'ai essayé de régler le scrollviewer sur Visible puis sur Auto , mais cela ne fonctionnait toujours pas.
J'ai finalement abandonné et changé le
TextBlock
en unTextBox
avec l' ensemble d' attributs Readonly , et cela a fonctionné comme un charme.la source
Je ne sais pas si quelqu'un d'autre a ce problème, mais en l'enveloppant
TextBlock
dans unScrollViewer
quelque chose qui a gâché mon interface utilisateur - comme solution de contournement simple, j'ai compris que le remplacerTextBlock
par unTextBox
comme celui-cicrée un
TextBox
qui ressemble et se comporte comme unTextBlock
avec une barre de défilement (et vous pouvez tout faire dans le concepteur).la source
Il s'agit d'une solution simple à cette question. Le défilement vertical ne sera activé que lorsque le texte déborde.
<TextBox Text="Try typing some text here " ScrollViewer.VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" />
la source