Ответ 1
Решение состоит в том, чтобы вручную вызвать myScrollViewer.UpdateLayout()
после myScrollViewer.ScrollToVerticalOffset()
. Тогда myScrollViewer.VerticalOffset
будет иметь ожидаемое значение.
Хорошо, поэтому всем известно, как установить положение прокрутки ScrollViewer. Все очерки и записи в блоге написаны о ScrollViewer.ScrollToVerticalOffset()
, и есть несколько советов с ответами на это здесь.
Итак, я ввожу:
myScrollViewer.ScrollToVerticalOffset(280);
... и он любезно прокручивается до этого местоположения.
Вопрос в том, какое свойство теперь содержит 280, поэтому я могу получить его позже?
(Подсказка: myScrollViewer.VerticalOffset
и ContentVerticalOffset
равны 0; myScrollViewer.ScrollInfo
просто нет.)
EDIT: По-видимому, мне нужна более подробная демонстрация.
private void btnTest_Click(object sender, RoutedEventArgs e) {
double scrollTarget = 280;
MessageBox.Show("Target: " + scrollTarget.ToString());
myScrollViewer.ScrollToVerticalOffset(scrollTarget);
MessageBox.Show("Now: " + myScrollViewer.VerticalOffset);
}
Я должен повторить, что этот выполняет прокрутку по назначению. Идет прямо именно там, где я хочу. Но, myScrollViewer.VerticalOffset
устанавливается в 0.
Решение состоит в том, чтобы вручную вызвать myScrollViewer.UpdateLayout()
после myScrollViewer.ScrollToVerticalOffset()
. Тогда myScrollViewer.VerticalOffset
будет иметь ожидаемое значение.
Удостоверьтесь, что ваш VerticalScrollBarVisibility = "Visible" и VerticalScrollOffset будут 280 после того, как событие LayoutUpdated будет запущено.
Я думаю, что вы вызываете myscrollViewer в конструкторе окна.
Вы можете вызвать их, когда вы нажимаете кнопку или загруженный метод для окна, чтобы значение обновлялось в значениях вертикального смещения. То есть, эти значения обновляются после инициализации вашего окна!