我正在与我一起工作,ScrollViewer
我注意到在调用ScrollToHorizontalOffset
或ScrollToVerticalOffset
这似乎对引发ScrollChanged
事件有延迟影响。我还注意到HorizontalOffset/VerticalOffset
属性并没有立即具有刚刚设置的值。一小段时间后,该ScrollChanged
事件被引发并且属性确实具有正确的值。
有谁知道这种延迟效果的原因?为什么不立即更新?反正有没有强制它立即更新?
我正在与我一起工作,ScrollViewer
我注意到在调用ScrollToHorizontalOffset
或ScrollToVerticalOffset
这似乎对引发ScrollChanged
事件有延迟影响。我还注意到HorizontalOffset/VerticalOffset
属性并没有立即具有刚刚设置的值。一小段时间后,该ScrollChanged
事件被引发并且属性确实具有正确的值。
有谁知道这种延迟效果的原因?为什么不立即更新?反正有没有强制它立即更新?
这种延迟效果的原因在于 ScrollViewer 本身。每次调用 ScrollToHorizontalOffset() 时,它都会将您的请求添加到内部处理队列中,该队列在 LayoutUpdated 事件上进行处理。要触发此事件,ScrollViewer 会使内部控件的排列无效。只有在排列传递完成后(ArangeOverride() 在可视化树下处理),它才会引发 ScrollChanged 事件。
转到您的最后一个问题:“无论如何强制它立即更新?”,我只能建议确保您的 ScrollViewer 的内容尽可能快地安排。我想不出任何其他方法,这可能比这个更容易......
也许如果您能说为什么您需要立即发生该事件,我们可以提出比这个答案更好的建议:)?