Проблемы Win 8.1 ScrollViewer с GridView

У меня есть VariableSizeGridView (он же GridView с VariableSizedWrapGrid), и поскольку фреймворк не поддерживает ISupportIncrementalLoading для VariableSizedWrapGrid, я реализовал свой собственный, «прослушивая» родительский элемент GridView ScrollViewer (в этом конкретном случае элемент управления Hub)

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

Проблема возникает, когда новые данные попадают на экран, средство просмотра прокрутки автоматически прокручивается до конца, и процесс загрузки начинается снова, заканчиваясь бесконечным циклом, если я не перемещаю полосу прокрутки в другое место.

Есть ли способ предотвратить автоматический переход прокрутки в конец после добавления некоторых элементов?

Спасибо


person DVD    schedule 09.11.2013    source источник


Ответы (1)


Вы можете создать пользовательский элемент управления, который переопределяет VariableSizeGridView и прослушивает, как и вы, средство просмотра прокрутки. Поскольку у вас есть доступ к последнему элементу GridView, после начала загрузки дополнительных элементов вы можете установить средство просмотра прокрутки в эту последнюю позицию. Получите визуальную ссылку на этот элемент, а затем вызовите этот код:

FrameworkElement focusedElement = FocusManager.GetFocusedElement() as FrameworkElement;
        GeneralTransform focusedVisualTransform = parent.TransformToVisual(_scrollViewer);

ApplyHorizontalScrolling(focusedElement, focusedVisualTransform);

  private void ApplyHorizontalScrolling(FrameworkElement focusedElement, GeneralTransform focusedVisualTransform)
    {
        Rect rectangle = focusedVisualTransform.TransformBounds(new Rect(new Point(focusedElement.Margin.Left, focusedElement.Margin.Top), focusedElement.RenderSize));
        double horizontalOffset = _scrollViewer.HorizontalOffset + (rectangle.Left);
        _scrollViewer.ChangeView(horizontalOffset, 0, _scrollViewer.ZoomFactor);
    }

Использование и настройка этого кода поможет вам предотвратить переход полосы прокрутки в последнюю позицию.

person Fritjof Berggren    schedule 11.11.2013
comment
Спасибо, я на самом деле сделал что-то немного другое, я сохраняю последние позиции средства просмотра прокрутки до появления новых элементов, а после изменения размера средства просмотра прокрутки я устанавливаю предыдущее значение горизонтальной прокрутки ;) В любом случае спасибо! - person DVD; 13.11.2013