Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 为什么将ScrollViewer.CanContentScroll设置为false禁用虚拟化_Wpf_Virtualization_Scrollviewer_Ui Virtualization - Fatal编程技术网

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

Wpf 为什么将ScrollViewer.CanContentScroll设置为false禁用虚拟化,wpf,virtualization,scrollviewer,ui-virtualization,Wpf,Virtualization,Scrollviewer,Ui Virtualization,正如大多数WPF开发人员所知,将ScrollViewer.CanContentScroll设置为false将禁用虚拟化;但我想知道它是如何工作的,因为我尝试在将ScrollViewer.CanContentScroll设置为false时启用虚拟化 “ScrollViewer当前允许两种滚动模式:平滑逐像素滚动(CanContentScroll=false)或离散逐项滚动(CanContentScroll=true)。当前WPF仅在按项滚动时支持UI虚拟化。基于像素的滚动也称为“物理滚动”,基于项

正如大多数WPF开发人员所知,将
ScrollViewer.CanContentScroll
设置为
false
将禁用虚拟化;但我想知道它是如何工作的,因为我尝试在将
ScrollViewer.CanContentScroll
设置为
false
时启用虚拟化

“ScrollViewer当前允许两种滚动模式:平滑逐像素滚动(CanContentScroll=false)或离散逐项滚动(CanContentScroll=true)。当前WPF仅在按项滚动时支持UI虚拟化。基于像素的滚动也称为“物理滚动”,基于项的滚动也称为“物理滚动”“逻辑滚动”

虚拟化需要基于项目的滚动,以便跟踪当前视图中的逻辑单元(项目)…将ScrollViewer设置为基于像素的滚动没有更多的逻辑单元概念,只有像素!!!

我经常被问到是否有办法克服这个限制。任何事情都有可能,但没有简单的解决办法。你必须重新实现当前虚拟化逻辑的重要部分,以将基于像素的滚动与UI虚拟化结合起来。你还必须解决随之而来的一些有趣的问题。例如,当项目容器具有不同高度时,如何计算拇指的大小?(请记住,您不知道虚拟化容器的高度–您只知道当前显示的容器的高度。)您可以根据您知道的高度假设一个平均值,也可以在项目进入内存时保留一个包含项目高度的列表(这将在用户与控件交互时提高拇指大小的准确性)。您还可以决定基于像素的滚动仅适用于高度相同的项目–这将简化解决方案。因此,是的,您可以想出一个解决方案来解决此限制,但这不是小事


您可以使用
virtualizangpanel.ScrollUnit=“Pixel”
(在.NET>=4.5中)还原虚拟化。您好@hoddmimemes我尝试过它,但不起作用,是否还需要打开它才能在基于像素的单元上工作?我尝试过设置
virtualizangpanel.ScrollUnit=“Pixel”
virtualizangpanel.CacheLengthUnit=“Pixel”
,以及其他属性,如
CacheLength
但不起作用。我解决了它,在ListView中设置:
ScrollViewer.CanContentScroll=“True”
,`VirtualzingPanel.isVirtualization=“True”
VirtualzingPanel.ScrollUnit=“Pixel”`和
VirtualzingPanel.isContaineServiceArtualizable=“True”
,并添加:
,它就可以工作了。这是我的
控件,并非所有控件都是这样的。例如
TreeView