У меня странное поведение с VirtualizingStackPanel
. У меня есть список с элементами, который содержит TextBlock
с TextWrap="Wrap"
. Вот код:
...
Это работает довольно хорошо, но если я пытаюсь прокрутить очень быстро (с помощью мыши на эмуляторе, а не автоматически ), есть некоторое отставание в прокрутке, вероятно, HorizontallOffset
иногда вычисляет неправильно, и внизу заканчивается очень странным результат (см. изображение, правое изображение демонстрирует нормальное поведение ).
После исследования я понял, что проблема в сочетании VirtualizingStackPanel
и TextBlock.TextWrap="Wrap"
, если я уберу один элемент из этой пары, все работает правильно.
Но мне нужна виртуализация из-за большого количества элементов и TextWrap
для корректного отображения текста.
Итак, я думаю о том, чтобы сделать свою собственную реализацию панели виртуализации, не могли бы вы подсказать мне, как это сделать или как решить текущую проблему?
UPD :Проблема:
на первых двух изображениях ListBox
уже (! )прокрутил вниз (больше не прокручивается вниз ), но элементы размещены неправильно, правильное размещение показано на правом изображении. Это происходит, только если вы будете прокручивать очень быстро.
UPD2 :Спасибо Милану Аггарвалу.Он представил хороший пример моей проблемы здесь . Похоже, это действительно ошибка в ListBox
. Предоставленный обходной путь не подходит для моего сценария, потому что мне нужно взаимодействовать с элементами управления внутри элемента ListBox
. Теперь я пытаюсь поймать событие ManipulationCompleted
и проверить, является ли оно Inertial
, если да, то это означает прокрутку, и я устанавливаю фокус на страницу:
void messagesList_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
if (e.IsInertial)
this.Focus();
}
P.S. спасибо за пожелания удачи;)