Mon prototype affiche les «documents» contenant les «pages» représentés par des images miniatures. Chaque document peut avoir n'importe quel nombre de pages. Par exemple, il peut y avoir 1000 documents de 5 pages chacun, ou 5 documents de 1000 pages chacun, ou quelque part entre les deux. Les documents ne contiennent pas d'autres documents. Dans mon balisage xaml j'ai un ListBox
, dont ItemsTemplate
fait référence à un innerItemsTemplate qui a également un ListBox
. Je veux les 2 niveaux d'éléments sélectionnés afin que je puisse effectuer diverses opérations sur des documents ou des pages (supprimer, fusionner, déplacer vers un nouvel emplacement, etc.). Le innerItemsTemplate ListBox
utilise un WrapPanel
comme ItemsPanelTemplate
.WPF ListBox avec une ListBox - Virtualisation et défilement de l'interface utilisateur
Pour le scénario où j'ai un grand nombre de documents avec quelques pages chacun (disons, 10000 documents avec 5 pages chacun), le défilement fonctionne très bien grâce à l'interface utilisateur de virtualisation par le VirtualizingStackPanel
. Cependant, j'ai des problèmes si j'ai un grand nombre de pages. Un document avec 1000 pages affichera seulement environ 50 à la fois (tout ce qui correspond à l'écran), et quand je défilerai vers le bas, le ListBox
externe se déplace vers le document suivant, en sautant les 950 pages ou qui n'étaient pas visibles. Parallèlement à cela, il n'y a pas VirtualzingWrapPanel
donc la mémoire de l'application augmente vraiment.
Je me demande si je vais à ce sujet dans le bon sens, en particulier , car il est difficile à expliquer! Je voudrais être en mesure d'afficher 10000 documents avec 1000 pages chacun (ne montrant que ce qui correspond à l'écran), en utilisant la virtualisation de l'interface utilisateur, et aussi le défilement lisse.
Comment puis-je m'assurer que le défilement se déplace dans toutes les pages du document avant d'afficher le document suivant, tout en conservant la virtualisation de l'interface utilisateur? La barre de défilement semble se déplacer uniquement vers le document suivant.
Est-il logique de représenter "documents" et "pages" - avec ma méthode actuelle d'utilisation d'un ListBox
dans un ListBox
?
J'apprécierais beaucoup vos idées. Merci.
Cette approche fonctionne en effet pour moi aussi loin que la virtualisation de l'interface utilisateur. Maintenant, j'ai juste besoin d'avoir le comportement de ListBox pour sélectionner des éléments (pages ou documents dans ce cas). Comment puis-je obtenir des modes de sélection multiples et étendus similaires à ListBox? –
De plus, je mets le ItemsPanelTemplate dans ItemsControl à un WrapPanel, qui ne semble pas envelopper quand je redimensionne l'application - il semble se comporter plus comme un stackPanel. Dans l'ensemble, je pense que la réponse ci-dessus par Ray me fait aller dans la bonne direction. –
Je suis si heureux que je suis tombé sur ce post, il m'a sauvé en me tirant tous mes cheveux. – Bijington