wpf - por qué configurar ScrollViewer.CanContentScroll para la virtualización de deshabilitación falsa
virtualization ui-virtualization (2)
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) actualmente a la vista ... Configurar ScrollViewer para el desplazamiento basado en píxeles no es un concepto más de unidades lógicas sino de píxeles.
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 aumentarí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.