Mi prototipo muestra "documentos" que contienen "páginas" que son representadas por imágenes en miniatura. Cada documento puede tener cualquier número de páginas. Por ejemplo, podría haber 1000 documentos con 5 páginas cada uno, o 5 documentos con 1000 páginas cada uno, o en algún lugar entremedio. Los documentos no contienen otros documentos. En mi marcado xaml tengo un ListBox
, cuyo ItemsTemplate
hace referencia a un innerItemsTemplate que también tiene un ListBox
. Quiero 2 niveles de elementos seleccionados para que pueda realizar varias operaciones en documentos o páginas (eliminar, fusionar, mover a una nueva ubicación, etc.). innerItemsTemplate ListBox
usa un WrapPanel
como ItemsPanelTemplate
.WPF ListBox con ListBox - Virtualización de UI y Desplazamiento
Para el escenario en el que tengo un gran número de documentos con un par de páginas cada uno (digamos, 10000 documentos con 5 páginas cada uno), el desplazamiento funciona muy bien gracias a la interfaz de usuario de virtualización por el VirtualizingStackPanel
. Sin embargo, tengo problemas si tengo una gran cantidad de páginas. Un documento con 1000 páginas solo mostrará aproximadamente 50 a la vez (lo que cabe en la pantalla), y cuando me desplazo hacia abajo, el ListBox
externo se mueve al documento siguiente, omitiendo las páginas 950 que no estaban visibles. Junto con eso, no hay VirtualzingWrapPanel
por lo que la memoria de la aplicación realmente aumenta.
Me pregunto si estoy haciendo esto de la manera correcta, especialmente ¡ya que es un poco difícil de explicar! Me gustaría poder mostrar 10000 documentos con 1000 páginas cada uno (solo se muestra lo que cabe en la pantalla), usando UI Virtualization, y también desplazamiento suave.
¿Cómo puedo asegurarme de que el desplazamiento se mueve a través de todas las páginas del documento antes de que se muestre el documento siguiente, y aún así mantener la virtualización de la interfaz de usuario? La barra de desplazamiento parece moverse al siguiente documento.
Parece lógico representar "documentos" y "páginas" - con mi método actual de usar un ListBox
dentro de un ListBox
?
Agradecería mucho cualquier idea que tenga. Gracias.
Este enfoque me funciona en cuanto a la virtualización de UI. Ahora solo necesito obtener el comportamiento similar a ListBox para seleccionar elementos (páginas o documentos en este caso). ¿Cómo puedo obtener modos de selección múltiples y ampliados similares a ListBox? –
Además, estoy configurando ItemsPanelTemplate dentro de ItemsControl en un WrapPanel, que no parece ajustarse cuando cambio el tamaño de la aplicación, parece comportarse más como un stackPanel. En general, siento que la respuesta anterior de Ray me ayuda a ir en la dirección correcta. –
Estoy tan contenta de haber tropezado con esta publicación que me salvó sacarme todo el pelo. – Bijington