0

我有一个 VariableSizeGridView(又名带有 VariableSizedWrapGrid 的 GridView),并且由于框架不支持 VariableSizedWrapGrid 上的 ISupportIncrementalLoading,我通过“侦听”GridView 父 ScrollViewer 来实现我自己的(这个特定情况下是 Hub 控件)

一切正常,当我到达滚动查看器的末尾时,我的代码调用了一个例程来获取更多数据。

当新数据出现在屏幕上时,会出现问题,scrollviewer 会自动滚动到末尾并再次开始加载过程,如果我不将滚动条移动到其他地方,则会以无限循环结束。

有什么办法可以防止在我添加一些项目后滚动查看器自动结束?

谢谢

4

1 回答 1

2

您可以创建一个覆盖 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);
    }

使用和调整此代码,将帮助您防止滚动条转到最新位置。

于 2013-11-11T12:01:23.157 回答