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

Имам VariableSizeGridView (известен още като GridView с VariableSizedWrapGrid) и тъй като рамката не поддържа ISupportIncrementalLoading на VariableSizedWrapGrid, внедрих своя собствена, като „слушах“ родителския ScrollViewer на GridView (този конкретен случай е контрола на Hub)

Всичко работи добре, когато стигна до края на scrollviewer, кодът ми извиква рутина, за да получи повече данни.

Проблемът възниква, когато новите данни попаднат на екрана, scrollviewer автоматично превърта до края и процесът на зареждане започва отново, завършвайки в безкраен цикъл, ако не преместя плъзгача на друго място.

Има ли някакъв начин да предотвратя, че scrollviewer автоматично отива до края, след като добавих някои елементи?

Благодаря


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


Отговори (1)


Можете да създадете персонализирана контрола, която замества от VariableSizeGridView и да слушате, както правите, scrollviewer. Тъй като имате достъп до най-новия елемент на GridView, след като започнете да зареждате още елементи, можете да зададете scrollviewer на тази последна позиция. Получете визуална препратка към този елемент и след това извикайте този код:

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