Patrick Skelton Ответов: 1

Как сделать так, чтобы два элемента управления WPF grid были одинаковой высоты, когда один из них содержит список?


У меня есть два элемента управления WP Grid рядом друг с другом. Один имеет фиксированный набор полей. Другой привязан к списку. Я хочу, чтобы два элемента управления сеткой были одинаковой высоты.

Код, который у меня сейчас есть, делает это "случайно", но он делает оба элемента управления сеткой такими же длинными, как сетка, содержащая список элементов. Я хочу противоположного. Я хочу, чтобы сетка со списком была заблокирована в том же размере, что и другая сетка, и чтобы WPF автоматически помещал полосы прокрутки в Список для просмотра элементов, которые выходят из нижней части списка.

Надеюсь, это имеет смысл.

Добрые пожелания ~ Патрик

Что я уже пробовал:

Я пробовал использовать Grid.IsSharedSizeScope="True" на контейнере для обоих элементов управления сеткой, а затем в каждой сетке, установив <RowDefinition SharedSizeGroup="xxxx"/> в каждой сетке.

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

1 Ответов

Рейтинг:
7

PureNsanity

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


Patrick Skelton

Выше по дереву у меня есть DockPanel, Border и другие экземпляры Grid. Ваше объяснение-одно из самых ясных и кратких, которые я читал о макете WPF, и, следовательно, "принять ответ" и 5 звезд, потому что я уверен, что это приведет к решению, когда у меня будет время поиграть с ним. Спасибо.

PureNsanity

DockPanel, Border и Grid ограничены, так что это не так. Если вы используете VS 2015, он имеет визуальный инспектор дерева, встроенный в отладчик, но если вы используете инструменты предыдущих версий, такие как WPF Inspector, могут помочь легко идентифицировать объект-нарушитель. StackPanel, вероятно, один из наиболее распространенных, но другой, который может показаться нелогичным, - это ScrollViewer. ScrollViewer на самом деле неограничен ... Если вы просматриваете визуальное дерево и не уверены, какой элемент управления есть, а какой нет, один простой способ проверить - установить высоту контейнеров на фиксированное значение, увеличивающееся. дерево. Установите значение как фиксированное значение, проверьте и двигайтесь вверх по дереву. Всякий раз, когда вы поднимаетесь вверх, и он переходит от фиксированной высоты к неограниченному росту, вы знаете, что контейнер под ним является контейнером-оскорблением. Возможно, вам придется пройти этот процесс несколько раз до корневого окна.

Patrick Skelton

Спасибо за советы. Я тут кое-что проверю. Хотя я немного волнуюсь, потому что почти уверен, что у меня есть только те элементы управления, о которых я упоминал. Должно быть, я ошибся.