Подтвердить что ты не робот

С#/WPF - Получить прокрутку позиции ScrollViewer?

Хорошо, поэтому всем известно, как установить положение прокрутки 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.

4b9b3361

Ответ 1

Решение состоит в том, чтобы вручную вызвать myScrollViewer.UpdateLayout() после myScrollViewer.ScrollToVerticalOffset(). Тогда myScrollViewer.VerticalOffset будет иметь ожидаемое значение.

Ответ 2

Удостоверьтесь, что ваш VerticalScrollBarVisibility = "Visible" и VerticalScrollOffset будут 280 после того, как событие LayoutUpdated будет запущено.

Ответ 3

Я думаю, что вы вызываете myscrollViewer в конструкторе окна.

Вы можете вызвать их, когда вы нажимаете кнопку или загруженный метод для окна, чтобы значение обновлялось в значениях вертикального смещения. То есть, эти значения обновляются после инициализации вашего окна!