почему настройка ScrollViewer.CanContentScroll на false отключает виртуализацию - PullRequest
29 голосов
/ 16 сентября 2010

Как известно большинству разработчиков WPF, установка ScrollViewer.CanContentScroll на false отключит виртуализацию;но я хотел бы знать, как это работает, потому что я пытаюсь включить виртуализацию при установке ScrollViewer.CanContentScroll на false.

Ответы [ 2 ]

48 голосов
/ 16 сентября 2010

"ScrollViewer в настоящее время допускает два режима прокрутки: плавная прокрутка по пикселям (CanContentScroll = false) или дискретная прокрутка по элементам (CanContentScroll = true). В настоящее время WPF поддерживает виртуализацию пользовательского интерфейса только при прокрутке по элементамПиксельная прокрутка также называется «физической прокруткой», а прокрутка на основе элементов также называется «логической прокруткой». "

Виртуализация требует прокрутки на основе элементов, чтобы можно было отслеживать логические единицы.(элементы), видимые в данный момент ... При настройке ScrollViewer для прокрутки на основе пикселей больше нет понятия логических единиц, а только пикселей !!!

7 голосов
/ 16 января 2014

Виртуализация пользовательского интерфейса

Меня часто спрашивают, есть ли способ обойти это ограничение. Ну, все возможно, но нет простого обходного пути. Вам придется заново реализовать значительную часть текущей логики виртуализации, чтобы объединить пиксельную прокрутку с виртуализацией пользовательского интерфейса. Вам также придется решить некоторые интересные проблемы, которые идут с ним. Например, как вы рассчитываете размер большого пальца, когда контейнеры элементов имеют разную высоту? (Помните, что вы не знаете высоту виртуализированных контейнеров - вы знаете только высоту контейнеров, которые отображаются в данный момент.) Вы можете принять среднее значение на основе известных вам высот, или вы можете сохранить список с высота элемента по мере того, как элементы заносятся в память (что увеличивает точность размера большого пальца при взаимодействии пользователя с элементом управления). Вы также можете решить, что пиксельная прокрутка работает только с элементами одинаковой высоты - это упростит решение. Так что, да, вы могли бы найти решение, чтобы обойти это ограничение, но оно не тривиально.

...