事件scrolltoVerticalOffset或scrolltoHorizontalOffset不会更改scrollviewer的值。 请告诉我HorizontalOffset和VerticalOffset的值在哪个事件发生了变化? 我已经尝试过LayoutUpdated()方法,但它进入了无限循环。
提前致谢
答案 0 :(得分:1)
一般情况下HorizontalOffset
和VerticalOffset
的值不会更新,但LayoutUpdated
(或其他ScrollContentPresenter
)更新后的IScrollInfo
事件除外值并调用InvalidateScrollInfo()。一个例外是在延迟滚动期间更新了每个DependencyProperty(但令人惊讶的是相应的CLR属性未更新),但这可能不适用于您的情况。
没有ScrollToHorizontalOffset
或ScrollToVerticalOffset events in WPF, but there is both a ScrollViewer method and a RoutedCommand of these names. Both the command version and the method version remember your request and execute it at the next
LayoutUpdated`事件,所以如果你想要做的就是确保滚动发生,只需发送命令或调用方法。
如果您要验证HorizontalOffset
或VerticalOffset
是否确实已根据需要进行了更新,您只需抓住ScrollChangedEvent
,这些值会在更新后触发,如下所示:< / p>
scrollViewer.ScrollChanged += (obj, e) =>
{
// Get offset information from 'e' or from scrollViewer
}
我不明白你的意思“我已经尝试过LayoutUpdated()方法,但它进入了一个无限循环,”因为你没有解释什么是“LayoutUpdated()方法”,但上面的信息应该是事件顺序清晰,帮助您找到解决方案。在任何情况下,您应该从ScrollChanged
事件中获取做出决定所需的所有信息。
答案 1 :(得分:1)
我遇到了同样的问题,谢谢你发布解决方案。 框架在无限循环中调用LayoutUpdated()方法,当您使用ScrollChanged()而不是LayoutUpdated()时,它解决了问题。