ISupportIncrementalLoading从下到上

我在WinRT中实现了ISupportIncrementalLoading以在ListView进行增量加载,它运行良好。 问题是新项目被添加到列表底部,看到更多项目,我需要下去。 我需要的是相反的。 我希望看到更多项目,我需要向上滚动。 该列表基本上是一个日志文件,最新的日期必须显示在列表的底部,如果我想查看较旧的记录,我需要使用向上滚动。

有办法吗?

我知道,这个问题已经过时了,但是我遇到了同样的问题并没有找到一个好的解决方案。

所以我会为其他有相同问题的人发布我的解决方案。

我的第一个解决方案是我自己的IncrementalLoadCollection,其中包含用于滚动和加载数据的自定义行为。 它工作正常,但对我来说不是很好。

所以我尝试了另一个强大的XAML技巧,它完美无缺,除了一个小鼠标滚轮行为。 它现在逆转:)。

解决方案非常简单和强大。 只需旋转ListView的ScrollViewer 180°并翻转它就可以再次使用右侧的滚动条。 然后对项目执行相同操作,以便它们再次正确。

而已。 增量加载由ListView处理,触摸事件和滚动条工作正确,现在只需将鼠标滚轮行为反转。

我的代码

                              

对Demetrius Axenowski的回答,这是我改变鼠标滚轮输入的方法。

注意我将其用于仅限桌面的应用程序

1)在ListView的ScrollViewer中找到第一个Grid并挂钩PointerWheelChanged事件。

  this._ScrollViewer = this.GetChildren().FirstOrDefault(); if (this._ScrollViewer == null) { throw new InvalidOperationException("ScrollViewer not found."); } this._ScrollViewerInsetBorder = this.GetChildren().FirstOrDefault(); this._BorderInsetGrid = this.GetChildren().FirstOrDefault(); this._BorderInsetGrid.AddHandler(ScrollViewer.PointerWheelChangedEvent, new PointerEventHandler(this.SW_Handler_OnPointerWheelChanged), true); 

2)覆盖鼠标滚轮行为。

  double desiredVerticalOffset = 0; private void SW_Handler_OnPointerWheelChanged(object sender, PointerRoutedEventArgs e) { PointerPoint mousePosition = e.GetCurrentPoint(sender as UIElement); var delta = mousePosition.Properties.MouseWheelDelta; // calculate desiredOffset desiredVerticalOffset = desiredVerticalOffset + delta; // limit desiredOffset. desiredVerticalOffset = desiredVerticalOffset < 0 ? 0 : desiredVerticalOffset; desiredVerticalOffset = desiredVerticalOffset > _ScrollViewer.ScrollableHeight ? _ScrollViewer.ScrollableHeight : desiredVerticalOffset; if (delta < 0 || delta > 0) { _ScrollViewer.ChangeView(null, desiredVerticalOffset, null, false); e.Handled = true; } }