使用GridView Win 8.1 ScrollViewer问题

时间:2013-11-09 15:44:59

标签: c# xaml windows-8 windows-runtime scrollviewer

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

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

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

有没有办法阻止滚动查看器在我添加一些项目后自动结束?

由于

1 个答案:

答案 0 :(得分:2)

您可以创建一个自定义控件,该控件从VariableSizeGridView覆盖并像您一样收听滚动查看器。由于您可以访问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);
    }

使用和修改此代码,将帮助您阻止滚动条转到最新位置。