为什么将ScrollViewer.CanContentScroll设置为false会禁用虚拟化

正如大多数WPF开发人员所知,将
ScrollViewer.CanContentScroll
设置为
false
将禁用虚拟化;但是我想知道它是如何工作的,因为我在设置
ScrollViewer.CanContentScroll
false
时尝试启用虚拟化。     
已邀请:
  “ScrollViewer目前允许两种滚动模式:平滑逐像素滚动(CanContentScroll = false)或逐项逐项滚动(CanContentScroll = true)。目前WPF仅在按项目滚动时支持UI虚拟化。基于像素的滚动是也被称为“物理滚动”和基于项目的滚动也称为“逻辑滚动”。“ 虚拟化需要基于项目的滚动,以便它可以跟踪当前视图中的逻辑单元(项目)...将ScrollViewer设置为基于像素的滚动,不再有逻辑单元的概念,只有像素!     
UI虚拟化   我经常被问到是否有办法解决这个限制。嗯,一切皆有可能,但没有简单的解决方法。您必须重新实现当前虚拟化逻辑的重要部分,以将基于像素的滚动与UI虚拟化相结合。您还必须解决随之而来的一些有趣问题。例如,当项目容器具有不同高度时,如何计算拇指的大小? (请记住,您不知道虚拟化容器的高度 - 您只知道当前显示的容器的高度。)您可以假设基于您知道的高度的平均值,或者您可以保留列表中的项目高度作为项目被带入内存(当用户与控件交互时,这将增加拇指大小的准确性)。您还可以确定基于像素的滚动仅适用于具有相同高度的项目 - 这将简化解决方案。所以,是的,你可以想出一个解决方案来解决这个限制,但这不是微不足道的。     

要回复问题请先登录注册