Windows Phone Mango прокрутка списка - PullRequest
3 голосов
/ 13 декабря 2011

Я создал простое приложение с ListBox и 1000 очень короткими строками. (без явного ItemTemplate). Если я прокручиваю его очень быстро - появляются черные дыры (процессор не может быстро рендериться, я полагаю).

В то же время, если я использую ItemsControl в ScrollViewer - все в порядке.

Почему? Можно ли как-нибудь замедлить скорость прокрутки в ListBox? Пользователи могут запутаться, увидев эти черные дыры на экране.

Обновление: Воспроизведение на устройстве (HTC HD7 7.10.7740). Я использую привязку данных через ItemSource

Репро проект: https://www.dropbox.com/s/lgcod878srnctp0/SLTK_LLS_TEST.zip

Репро видео (!): https://www.dropbox.com/s/t25dguq0vaa88o9/WP_20111213_113729Z.mp4

Ответы [ 2 ]

4 голосов
/ 13 декабря 2011

В ListBox по умолчанию включена «виртуализация» (точнее: сортировка виртуализации контейнера пользовательского интерфейса), он не загружает полный список, только фрагменты. При прокрутке он должен сначала визуализировать элементы, а когда вы быстро прокручиваете, вы замечаете эту задержку рендеринга. Это достигается с помощью VirtualizingStackPanel. Преимущество в том, что это экономит память.

Вы можете отключить виртуализацию при использовании пользовательских ItemsPanel:

<ListBox x:Name="YourListbox">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

... но решение потребует больше ресурсов с самого начала. Может стать опасным с длинными списками.

С другой стороны, вы можете включить виртуализацию на ItemsControl, для целей тестирования вы должны быть в состоянии достичь задержки рендеринга («черные дыры»).

1 голос
/ 13 декабря 2011

Как долго ваши строки?Это что-то, что вы можете легко и разумно разделить на очень краткое резюме (8-10 символов)?Если это так, вы, возможно, захотите взглянуть на LazyListBox , который пытается решить проблему (хотя он был предназначен для более сложных макетов, чем вы говорите, поэтому преимущества могут быть незначительными)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...