Почему событие ScrollViewer ScrollChanged возникает только после небольшой задержки после вызова ScrollToVerticalOffset / ScrollToHorizontOffset? - PullRequest
1 голос
/ 01 сентября 2009

Я работал с ScrollViewer и заметил, что при вызове ScrollToHorizontalOffset или ScrollToVerticalOffset это, по-видимому, имеет задержанный эффект при возникновении события ScrollChanged. Я также заметил, что свойства HorizontalOffset/VerticalOffset не сразу имеют значение, которое было только что установлено. После небольшого промежутка времени возникает событие ScrollChanged, и свойства имеют правильные значения.

Кто-нибудь знает причину этого отсроченного эффекта? Почему он не обновляется сразу? Есть ли способ заставить его обновиться немедленно?

1 Ответ

3 голосов
/ 02 сентября 2009

Причина этого отложенного эффекта лежит внутри самого ScrollViewer. Каждый раз, когда вы вызываете ScrollToHorizontOffset (), он добавляет ваш запрос во внутреннюю очередь обработки, которая обрабатывается в событии LayoutUpdated. Для запуска этого события ScrollViewer делает недействительным расположение внутренних элементов управления. Только после того, как проход аранжировки завершен (ArangeOverride () обрабатывается по визуальному дереву), он вызывает событие ScrollChanged.

Переходя к вашему последнему вопросу: «Есть ли способ заставить его обновиться немедленно?», Я могу лишь посоветовать убедиться, что содержимое вашего ScrollViewer организовано как можно быстрее. Я не могу придумать другого пути, который может быть проще, чем этот ...

Может быть, если бы вы могли сказать, почему вам нужно, чтобы это событие произошло немедленно, мы можем предложить что-то лучше, чем этот ответ:)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...