Метод BringIntoView - PullRequest
       13

Метод BringIntoView

6 голосов
/ 12 декабря 2011

В WPF у меня есть прокрутка с 7 различными групповыми окнами.Каждая группа - это отдельный раздел для разных форм.Поскольку средство просмотра прокрутки очень длинное, я поместил ряд кнопок в панель стека на левой стороне панели и выполнил выделение кода, чтобы при нажатии кнопки запускался метод BringIntoView для соответствующего группового блока.

Мой вопрос заключается в том, есть ли способ заставить BringIntoView размещать групповой блок в верхней части видимого раздела каждый раз.По умолчанию BringIntoView перемещает средство просмотра прокрутки только до тех пор, пока не будет виден весь групповой блок, а не для отображения самого верхнего элемента.Есть ли способ обойти это?

Я изучил использование ScrollToVerticalOffset, но не смог понять, как получить правильную позицию, в основном потому, что он говорит, что у groupbox нет свойства Locate, которое я собирался использовать дляполучить позицию, затем установить ее с помощью ScrollToVerticalOffset.Одна вещь, о которой я подумал, когда набирал эту строку, состояла в том, чтобы каждое нажатие кнопки сначала вставлялось в верхнюю рамку группы, а затем сразу переходить к правильному, но это похоже на взлом, и я предпочитаю найти правильный путь.:)

1 Ответ

10 голосов
/ 12 декабря 2011

Попробуйте это:

private void ScrollToGroupBox(GroupBox groupBox)
{
  GeneralTransform groupBoxTransform = groupBox.TransformToAncestor(scrollViewer);
  Rect rectangle = groupBoxTransform.TransformBounds(new Rect(new Point(0, 0), groupBox.RenderSize));
  scrollViewer.ScrollToVerticalOffset(rectangle.Top + scrollViewer.VerticalOffset);
}

Код получает позицию вашего GroupBox внутри Scrollviewer и прокручивает до него.

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