4

事件scrolltoVerticalOffset 或scrolltoHorizo​​ntalOffset 不会改变scrollviewer 的值。请告诉我,Horizo​​ntalOffset 和 VerticalOffset 的值在哪个事件发生变化?我尝试过 LayoutUpdated() 方法,但它进入了无限循环。

提前致谢

4

2 回答 2

2

通常,HorizontalOffset和的值VerticalOffset不会更新,除非在(或其他)更新其值并调用 InvalidateScrollInfo()LayoutUpdated之后的事件期间。一个例外是这些中的每一个的 DependencyProperty 在延迟滚动期间都会更新(但令人惊讶的是,相应的 CLR 属性没有更新),但这可能不适用于您的情况。ScrollContentPresenterIScrollInfo

WPF中没有ScrollToHorizontalOffsetorScrollToVerticalOffset事件,但同时有一个ScrollViewer方法和RoutedCommand这些名称中的一个。命令版本和方法版本都会记住您的请求并在下一个LayoutUpdated事件中执行它,因此如果您只想确保滚动发生,只需发送命令或调用方法即可。

如果您想验证HorizontalOffsetVerticalOffset确实已根据需要更新,您可以简单地捕获ScrollChangedEvent,它在值更新后触发,如下所示:

scrollViewer.ScrollChanged += (obj, e) =>
{
  // Get offset information from 'e' or from scrollViewer
}

我不明白您所说的“我尝试过 LayoutUpdated() 方法,但它进入了无限循环”是什么意思,因为您没有解释“LayoutUpdated() 方法”是什么,但上述信息应该确定事件的顺序清楚并帮助您解决问题。无论如何,您做出决定所需的所有信息都应该从ScrollChanged活动中获得。

于 2010-04-14T18:44:29.723 回答
1

我遇到了同样的问题,感谢发布解决方案。LayoutUpdated() 方法由框架在无限循环中调用,当您使用 ScrollChanged() 而不是 LayoutUpdated() 时,它可以解决问题。

于 2010-05-08T03:42:54.960 回答