Ошибка VirtualizingStackPanel и TextWrapping? Windows Phone

У меня странное поведение с VirtualizingStackPanel. У меня есть список с элементами, который содержит TextBlockс TextWrap="Wrap". Вот код:


    
        
    
    
        
            
                
                    
                   ...
                    
                
                
                    
                
            
        
    

Это работает довольно хорошо, но если я пытаюсь прокрутить очень быстро (с помощью мыши на эмуляторе, а не автоматически ), есть некоторое отставание в прокрутке, вероятно, HorizontallOffsetиногда вычисляет неправильно, и внизу заканчивается очень странным результат (см. изображение, правое изображение демонстрирует нормальное поведение ).

scroll bug

После исследования я понял, что проблема в сочетании 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. спасибо за пожелания удачи;)

10
задан Alexander 17 August 2012 в 15:44
поделиться