ほとんどのWPF開発者が知っているように、に設定ScrollViewer.CanContentScroll
するfalse
と仮想化が無効になります。ScrollViewer.CanContentScroll
ただし、に設定して仮想化を有効にしようとしているため、どのように機能するかを知りたいfalse
です。
3 に答える
"ScrollViewer は現在、2 つのスクロール モードを許可しています: スムーズなピクセル単位のスクロール (CanContentScroll = false) または個別の項目単位のスクロール (CanContentScroll = true)。現在、WPF は項目単位でスクロールする場合にのみ UI 仮想化をサポートしています。ピクセルベースのスクロールは「物理スクロール」とも呼ばれ、アイテムベースのスクロールは「論理スクロール」とも呼ばれます。
仮想化にはアイテムベースのスクロールが必要なので、現在表示されている論理ユニット (アイテム) を追跡できます... ScrollViewer をピクセルベースのスクロールに設定すると、論理ユニットの概念はなくなり、ピクセルだけになります!!!
この制限を回避する方法があるかどうか、よく尋ねられます。まあ、何でも可能ですが、簡単なことはありません回避策。ピクセルベースのスクロールと UI の仮想化を組み合わせるには、現在の仮想化ロジックのかなりの部分を再実装する必要があります。また、それに伴ういくつかの興味深い問題を解決する必要があります。たとえば、アイテム コンテナーの高さが異なる場合、親指のサイズをどのように計算しますか? (仮想化されたコンテナーの高さがわからないことに注意してください。現在表示されているコンテナーの高さしかわかりません。) わかっている高さに基づいて平均を推測することも、アイテムがメモリに取り込まれるときのアイテムの高さ (これにより、ユーザーがコントロールを操作するときのつまみのサイズの精度が向上します)。また、ピクセルベースのスクロールが同じ高さのアイテムでのみ機能するように決定することもできます。これにより、ソリューションが簡素化されます. あ、はい、