1

我正在与我一起工作,ScrollViewer我注意到在调用ScrollToHorizontalOffsetScrollToVerticalOffset这似乎对引发ScrollChanged事件有延迟影响。我还注意到HorizontalOffset/VerticalOffset属性并没有立即具有刚刚设置的值。一小段时间后,该ScrollChanged事件被引发并且属性确实具有正确的值。

有谁知道这种延迟效果的原因?为什么不立即更新?反正有没有强制它立即更新?

4

1 回答 1

3

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

转到您的最后一个问题:“无论如何强制它立即更新?”,我只能建议确保您的 ScrollViewer 的内容尽可能快地安排。我想不出任何其他方法,这可能比这个更容易......

也许如果您能说为什么您需要立即发生该事件,我们可以提出比这个答案更好的建议:)?

于 2009-09-01T21:54:40.137 回答