WPF - центрирование контента в просмотрщике прокрутки? - PullRequest
15 голосов
/ 15 апреля 2011

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

Есть лиЕсть ли очевидные способы добиться этого в WPF?Все решения, которые я могу придумать прямо сейчас, включают в себя большую работу над пользовательскими элементами управления.

enter image description here

Ответы [ 3 ]

13 голосов
/ 19 марта 2012

Вы можете легко установить контент в центр, используя следующий код:

scrollviewer.ScrollToVerticalOffset(scrollviewer.ScrollableHeight / 2);
scrollviewer.ScrollToHorizontalOffset(scrollviewer.ScrollableWidth / 2);
7 голосов
/ 15 апреля 2011

ScrollViewer.ScrollToHorizontalOffset() - это то, что вы ищете.Просто нужно рассчитать, какое смещение выбранного элемента относительно стековой панели.Вы можете получить это с помощью чего-то вроде selectedElement.TranslatePoint( new Point(), stackPanel)

Чтобы это работало для элементов на дальних концах, вам нужно добавить несколько «пустых» элементов в начало и конец окна просмотра прокрутки, чтобы занятьсоответствующее количество места.

Чтобы это выглядело красиво, вызовите ScrollToHorizontOffset в таймере, чтобы сделать прокрутку «анимированной» вместо прыжка

0 голосов
/ 13 декабря 2017

Это сработало для меня:

//for ScrollViewer s;
s.ScrollToHorizontalOffset((s.ExtentWidth - s.ViewportWidth) / 2);
s.ScrollToVerticalOffset((s.ExtentHeight - s.ViewportHeight) / 2);
...