正如大多数WPF开发人员所知,将ScrollViewer.CanContentScroll
设置为false
将禁用虚拟化;但我想知道它是如何工作的,因为我尝试启用虚拟化,同时将ScrollViewer.CanContentScroll
设置为false
。为什么将ScrollViewer.CanContentScroll设置为false禁用虚拟化
27
A
回答
44
“的ScrollViewer目前允许两个滚动模式:平滑像素的逐像素滚动(CanContentScroll =假)或离散项逐项滚动(CanContentScroll =真)当前WPF仅由项目滚动时支持UI虚拟。基于像素的滚动也称为“物理滚动”,基于项目的滚动也称为“逻辑滚动”。
虚拟化需要基于项目的滚动,因此它可以跟踪目前正在查看的逻辑单元(项目)......将ScrollViewer设置为基于像素的滚动不再是逻辑单元的概念,而只是像素! !
5
经常有人问我,如果有一种方法可以解决此限制。那么,任何事情都是可能的,但是没有简易解决方法。您将不得不重新实现当前虚拟化逻辑的重要部分,以将基于像素的滚动与UI虚拟化结合起来。你也必须解决一些有趣的问题。例如,当物品容器具有不同的高度时,如何计算拇指的大小? (请记住,您不知道虚拟化容器的高度 - 您只知道当前显示的容器的高度。)您可以根据您知道的高度来设定平均值,或者您可以使用项目高度作为项目被带入内存(这将增加拇指大小的准确性,因为用户与控件交互)。您也可以决定基于像素的滚动仅适用于高度相同的项目 - 这将简化解决方案。所以,是的,你可以想出一个解决这个限制的解决方案,但这不是微不足道的。
相关问题
- 1. 为什么将validate_password_field设置为false将禁用所有authlogic验证?
- 2. 为什么虚拟属性被设置为空?
- 3. 为什么要虚拟化移动设备?
- 4. 为什么MSBuild将复制本地复制dll设置为false?
- 5. 为什么成员IsApproved将自己设置为false?
- 6. 为什么我需要将resolveexternals设置为false?
- 7. 为什么Linq查询将我的Arithabort选项设置为false?
- 8. 即使disable属性设置为false,为什么Push Button被禁用?
- 9. 为什么编译器将它设置为False时将System.Object视为null为什么编译器将它设置为False
- 10. Silverlight:禁用UI虚拟化?
- 11. 为什么评估函数将String设置为“false”而不是布尔false?
- 12. BaseAdapter:将hasStableIds()设置为false?
- 13. 将Page.IsValid设置为False
- 14. 将WCF设置为nillable = false
- 15. 为什么使用虚拟功能?
- 16. 为什么将html属性设置为false会将其视为意外标记?
- 17. VB.NET禁用ListView而不将Enable属性设置为false
- 18. 将禁用的属性设置为true或false switchery
- 19. 为什么ListView没有虚拟化我的用户控件?
- 20. 为什么通用的nvidia卡(像gtx1080)不能虚拟化?
- 21. suPHP将用户/组设置为虚拟主机并使用docroot
- 22. 为什么Knockout.js设置显示为none当自定义绑定设置为false
- 23. 为什么在使用代理时需要将KeepAlive设置为false?
- 24. 为什么此方法在未标记为虚拟时表现为虚拟?
- 25. 为我的虚拟主机设置SSL
- 26. 如何为php设置虚拟目录
- 27. 为android设置虚拟框时出错
- 28. 设置虚拟函数声明为零?
- 29. apache phpmyadmin设置为虚拟主机
- 30. 将dasblog设置为Umbraco应用程序下的虚拟目录