我有一个VariableSizeGridView(也就是带有VariableSizedWrapGrid的GridView),并且由于框架不支持VariableSizedWrapGrid上的ISupportIncrementalLoading,我通过“监听”GridView父ScrollViewer(这个特定情况下是Hub控件)实现了我自己的
一切正常,当我到达滚动查看器的末尾时,我的代码调用例程来获取更多数据。
当新数据出现在屏幕上时会出现问题,滚动查看器会自动滚动到结尾并且加载过程再次开始,如果我不将滚动条移动到其他位置,则会以无限循环结束。
有没有办法阻止滚动查看器在我添加一些项目后自动结束?
由于
答案 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);
}
使用和修改此代码,将帮助您阻止滚动条转到最新位置。