事件scrolltoVerticalOffset 或scrolltoHorizontalOffset 不会改变scrollviewer 的值。请告诉我,HorizontalOffset 和 VerticalOffset 的值在哪个事件发生变化?我尝试过 LayoutUpdated() 方法,但它进入了无限循环。
提前致谢
事件scrolltoVerticalOffset 或scrolltoHorizontalOffset 不会改变scrollviewer 的值。请告诉我,HorizontalOffset 和 VerticalOffset 的值在哪个事件发生变化?我尝试过 LayoutUpdated() 方法,但它进入了无限循环。
提前致谢
通常,HorizontalOffset
和的值VerticalOffset
不会更新,除非在(或其他)更新其值并调用 InvalidateScrollInfo()LayoutUpdated
之后的事件期间。一个例外是这些中的每一个的 DependencyProperty 在延迟滚动期间都会更新(但令人惊讶的是,相应的 CLR 属性没有更新),但这可能不适用于您的情况。ScrollContentPresenter
IScrollInfo
WPF中没有ScrollToHorizontalOffset
orScrollToVerticalOffset
事件,但同时有一个ScrollViewer
方法和RoutedCommand
这些名称中的一个。命令版本和方法版本都会记住您的请求并在下一个LayoutUpdated
事件中执行它,因此如果您只想确保滚动发生,只需发送命令或调用方法即可。
如果您想验证HorizontalOffset
或VerticalOffset
确实已根据需要更新,您可以简单地捕获ScrollChangedEvent
,它在值更新后触发,如下所示:
scrollViewer.ScrollChanged += (obj, e) =>
{
// Get offset information from 'e' or from scrollViewer
}
我不明白您所说的“我尝试过 LayoutUpdated() 方法,但它进入了无限循环”是什么意思,因为您没有解释“LayoutUpdated() 方法”是什么,但上述信息应该确定事件的顺序清楚并帮助您解决问题。无论如何,您做出决定所需的所有信息都应该从ScrollChanged
活动中获得。
我遇到了同样的问题,感谢发布解决方案。LayoutUpdated() 方法由框架在无限循环中调用,当您使用 ScrollChanged() 而不是 LayoutUpdated() 时,它可以解决问题。