J’ai un ListView
avec des cellules personnalisées (éléments).
Ce ListView
représente une conversation entre deux personnes échangeant des messages avec mon application. Chaque fois qu’un message est ajouté, la conversation défile automatiquement jusqu’au dernier élément.
Je suis confronté à quelques “étranges” problèmes:
Lorsqu’un utilisateur écrit un message assez long (par exemple, 10 lignes), il peut alors occuper la quasi-totalité de l’écran (c’est-à-dire l’espace alloué à ListView
), ce qui est normal bien sûr, mais le défilement est quelque peu interrompu .
Tout d’abord, lorsque la liste défile automatiquement vers ce message, un grand espace blanc apparaît sous l’élément jusqu’au bas de mon ListView
. Voir l’image :
Et lorsque les messages sont très courts (une seule ligne):
Deuxièmement, et dans tous les cas, la vitesse de défilement est rapide. Un simple “coup de molette” (la sensation dans votre doigt lorsque vous faites défiler) déplacera la barre de défilement trop rapidement: jusqu’à 4 petits messages défilent! C’est trop !
La question est donc: comment contrôler la vitesse de défilement? Comment le ralentir? Pourquoi y a-t-il ce grand espace blanc? Merci pour l’aide !
Demandé par @CurtisHx, mon ListView XAML
est le suivant:
http://pastebin.com/FFZGhi6w
J’espère que cela aide à comprendre mon problème!
Une façon de définir ScrollViewer.CanContentScroll="False"
sur ListView
. https://social.msdn.microsoft.com/Forums/vstudio/en-US/47bd6a75-7791-4c0f-93ae-931e9a6540e7/smooth-scrolling-on-listbox?forum=wpf
Vous allez perdre la virtualisation sur ListView
. Conservez donc un nombre d’éléments raisonnable dans ListView
. Cela devrait régler la vitesse de défilement rapide.
Alignement du texte
Le texte est correctement aligné. Actuellement, le conteneur parent limite la largeur de TextBlocks
. TextBlocks
remplira tout l’espace horizontal possible avant d’envelopper le texte. Ainsi, pour les longs messages, le TextBlock
se développera horizontalement jusqu’à atteindre les limites du conteneur parent.
Pour obtenir le texte échelonné, la largeur du message doit être inférieure à la largeur de ListView
. Si vous élargissez la fenêtre, vous verrez le texte s’échelonner. Vous trouverez ci-dessous un extrait de code indiquant le TextBlock
qui doit être limité en largeur.