正如大多數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應用程序下的虛擬目錄