Как поддержать элемент развернуть / свернуть и изменить размер с WPF GridSplitter? - PullRequest
0 голосов
/ 02 ноября 2019

Здесь пишется небольшое приложение WPF, но я не могу решить эту проблему:

У меня есть панель внизу окна, которую пользователь должен развернуть / свернуть при нажатии кнопки. Кроме того, при расширении пользователь должен иметь возможность изменять его размер, перетаскивая GridSplitter.

Чтобы построить это, я разместил элементы управления в сетке из трех строк:

Row[0](Height=*)    = some content (not important for the problem)
Row[1](Height=5)    = GridSplitter (I have also tried setting Row Height to Auto)
Row[2](Height=Auto) = the resizable/expandable/collapsable "panel"

Iпопытался контролировать высоту "панели". Это позволяет расширять / сжимать, но при изменении размера с помощью GridSplitter «панель» не растягивается для изменения размера. Я попытался сбросить «панель» Height = double.NaN, и она VerticalAlignment = VerticalAlignment.Stretch, когда пользователь начинает перетаскивать сплиттер, но это не работает.

Если я не пытаюсь явно контролировать высоту «панели»,растягивается, как и ожидалось, и может быть изменен с помощью GridSplitter, но это не позволяет расширять / сжимать одним нажатием кнопки.

Любые советы о том, как реализовать обе эти функции, будут великолепны!

1 Ответ

1 голос
/ 02 ноября 2019

Когда панель развернута, вы хотите, чтобы она соответствовала высоте строки сетки, но она не развернулась, вы хотите, чтобы высота строки сетки соответствовала высоте панели. Или, во всяком случае, вы хотите, чтобы панель определяла свою высоту. Не существует одного режима компоновки, который бы покрывал оба случая, но вы легко могли бы написать триггер или преобразователь значений, который привязан к расширенному состоянию панели (это будет IsExpanded, если панель является элементом управления WPF Expander),и изменяется RowDescription.Height с *, когда панель развернута, до Auto, когда панель свернута.

Если это триггер - самый простой способ - вы можете присвоить RowDefinition стиль и поместить триггер в раздел Style.Triggers стиля.

...