2009-09-01 44 views
1

我与ScrollViewer工作,我注意到,在调用ScrollToHorizontalOffsetScrollToVerticalOffset时,这似乎在提高ScrollChanged事件延迟效应。我还注意到,HorizontalOffset/VerticalOffset属性并不立即具有刚刚设置的值。经过一小段时间后,ScrollChanged事件被引发并且属性具有正确的值。为什么ScrollViewer中ScrollChanged事件只以下,以ScrollToVerticalOffset/ScrollToHorizo​​ntalOffset调用一个小的延迟后长大的吗?

有谁知道这个滞后效应的原因是什么?为什么不立即更新?无论如何强迫它立即更新?

回答

3

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

去你的最后一个问题:“反正是有,迫使它立即更新?”,我只能建议,使您的ScrollViewer的肯定内容尽可能快安排越好。我想不出任何其他方式,这可能是比这要容易得多......

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

+0

感谢您的回答。我并不需要立即触发它,这不完全是一个问题,我只是好奇它为什么它的工作方式。 – 2009-09-02 08:21:54

相关问题