wpf scrollviewer scrolltoverticaloffset

时间:2010-04-13 14:26:31

标签: wpf scrollviewer

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

提前致谢

2 个答案:

答案 0 :(得分:1)

一般情况下HorizontalOffsetVerticalOffset的值不会更新,但LayoutUpdated(或其他ScrollContentPresenter)更新后的IScrollInfo事件除外值并调用InvalidateScrollInfo()。一个例外是在延迟滚动期间更新了每个DependencyProperty(但令人惊讶的是相应的CLR属性未更新),但这可能不适用于您的情况。

没有ScrollToHorizontalOffsetScrollToVerticalOffset 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`事件,所以如果你想要做的就是确保滚动发生,只需发送命令或调用方法。

如果您要验证HorizontalOffsetVerticalOffset是否确实已根据需要进行了更新,您只需抓住ScrollChangedEvent,这些值会在更新后触发,如下所示:< / p>

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

我不明白你的意思“我已经尝试过LayoutUpdated()方法,但它进入了一个无限循环,”因为你没有解释什么是“LayoutUpdated()方法”,但上面的信息应该是事件顺序清晰,帮助您找到解决方案。在任何情况下,您应该从ScrollChanged事件中获取做出决定所需的所有信息。

答案 1 :(得分:1)

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