WPF change la vitesse de défilement de ListView

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 : Exemple avec un grand message et un grand espace blanc

Et lorsque les messages sont très courts (une seule ligne): Exemple avec des messages courts

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 !

[MISE À JOUR 1]

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.