2010-04-13 5 views
3

События scrolltoVerticalOffset или scrolltoHorizontalOffset не изменяют значения scrollviewer. Скажите, пожалуйста, в каком случае изменились значения HorizontalOffset и VerticalOffset? Я пробовал метод LayoutUpdated(), но он идет в бесконечном цикле.wpf scrollviewer scrolltoverticaloffset

Заранее спасибо

ответ

1

В целом значения HorizontalOffset и VerticalOffset не обновляется, за исключением во время LayoutUpdated события после ScrollContentPresenter (или другого IScrollInfo) обновило свое значение и называется InvalidateScrollInfo(). Единственное исключение заключается в том, что DependencyProperty для каждого из них обновляется во время отложенной прокрутки (но удивительно, что соответствующее свойство CLR не обновляется), но это, вероятно, не применимо в вашем случае.

Нет ScrollToHorizontalOffset или ScrollToVerticalOffset events in WPF, but there is both a ScrollViewer method and a RoutedCommand of these names. Both the command version and the method version remember your request and execute it at the next LayoutUpdated`, поэтому, если все, что вы хотите сделать, это убедиться, что прокрутка происходит, просто отправьте команду или вызовите метод.

Если вы хотите, чтобы убедиться, что HorizontalOffset или VerticalOffset действительно был обновлен при желании вы можете просто поймать ScrollChangedEvent, который срабатывает после значения были обновлены, например:

scrollViewer.ScrollChanged += (obj, e) => 
{ 
    // Get offset information from 'e' or from scrollViewer 
} 

Я не понял, что вы подразумеваете под «Я пробовал метод LayoutUpdated(), но он идет в бесконечном цикле», поскольку вы не объяснили, что такое метод LayoutUpdated(), но приведенная выше информация должна сделать порядок событий ясным и помочь вам ваш путь к решению. В любом случае вся информация, необходимая для принятия решения, должна быть доступна из события ScrollChanged.

1

Я столкнулся с той же проблемой, спасибо за публикацию решения. Метод LayoutUpdated() вызывается каркасом в бесконечном цикле, когда вы используете ScrollChanged() вместо LayoutUpdated(), он исправляет проблему.

Смежные вопросы