【问题标题】:Why is the ScrollViewer ScrollChanged event only raised after a small delay following a call to ScrollToVerticalOffset/ScrollToHorizontalOffset?为什么 ScrollViewer ScrollChanged 事件仅在调用 ScrollToVerticalOffset/ScrollToHorizo​​ntalOffset 后的一小段延迟后引发?
【发布时间】:2009-09-01 09:01:02
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf scrollviewer offset


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。我真的不需要立即触发它,这并不是一个问题,我只是好奇它为什么会这样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多