为什么ScrollViewer ScrollChanged事件仅在调用ScrollToVerticalOffset / ScrollToHorizo​​ntalOffset后的一小段延迟后才会引发?

时间:2009-09-01 09:01:03

标签: c# wpf scrollviewer offset

我正在使用ScrollViewer,我注意到在调用ScrollToHorizontalOffsetScrollToVerticalOffset时,这似乎会在提升ScrollChanged事件时产生延迟效果。我还注意到HorizontalOffset/VerticalOffset属性不会立即具有刚刚设置的值。在一段时间后,ScrollChanged事件被引发,并且属性具有正确的值。

有谁知道这种延迟效应的原因?为什么不立即更新?反正是否迫使它立即更新?

1 个答案:

答案 0 :(得分:3)

这种延迟效果的原因在于ScrollViewer本身。每次调用ScrollToHorizo​​ntalOffset()时,它都会将您的请求添加到内部处理队列中,该队列在LayoutUpdated事件上处理。要触发此事件,ScrollViewer会使内部控件的排列无效。只有在安排传递完成后(ArangeOverride()在可视树下处理),它才会引发ScrollChanged事件。

回答你的最后一个问题:“无论如何迫使它立即更新?”,我只能建议确保尽快安排ScrollViewer的内容。我想不出任何其他方式,这可能比这个更容易......

也许如果你可以说为什么你需要立即发生这个事件我们可以建议比这个答案更好的东西:)?