por qué configurar ScrollViewer.CanContentScroll para la virtualización de deshabilitación falsa

Como la mayoría de los desarrolladores de WPF saben, establecer ScrollViewer.CanContentScroll en false deshabilitará la virtualización; pero me gustaría saber cómo funciona, porque trato de habilitar la virtualización mientras configuro ScrollViewer.CanContentScroll en false .

“ScrollViewer actualmente permite dos modos de desplazamiento: desplazamiento suave píxel por píxel (CanContentScroll = falso) o desplazamiento discreto elemento por elemento (CanContentScroll = true). Actualmente, WPF solo admite la virtualización de UI cuando se desplaza por elemento. El desplazamiento basado en píxeles es también llamado “desplazamiento físico” y el desplazamiento basado en elementos también se llama “desplazamiento lógico”.

La virtualización requiere un desplazamiento basado en elementos para que pueda realizar un seguimiento de las unidades lógicas (elementos) que están actualmente a la vista … Al configurar el ScrollViewer en un desplazamiento basado en píxeles, ¡no hay más concepto de unidades lógicas, sino solo píxeles!

UI Virtualización

A menudo me preguntan si hay una forma de evitar esta limitación. Bueno, todo es posible, pero no hay una solución fácil . Tendría que volver a implementar partes significativas de la lógica de virtualización actual para combinar el desplazamiento basado en píxeles con la virtualización de la interfaz de usuario. También deberías resolver algunos problemas interesantes que vienen con eso. Por ejemplo, ¿cómo se calcula el tamaño del pulgar cuando los contenedores de elementos tienen diferentes alturas? (Recuerde que no conoce la altura de los contenedores virtualizados, solo conoce la altura de los contenedores que se muestran actualmente). Podría suponer un promedio basado en las alturas que conoce, o podría mantener una lista con el las alturas de elementos a medida que los elementos se llevan a la memoria (lo que boostía la precisión del tamaño del pulgar a medida que el usuario interactúa con el control). También puede decidir que el desplazamiento basado en píxeles solo funciona con elementos que son de la misma altura; esto simplificaría la solución. Entonces, sí, podría encontrar una solución para evitar esta limitación, pero no es trivial.