Я написал пользовательскую панель, которая отображает дочерние элементы, закрепленные вертикально или горизонтально, разделенные перемещающимися разделителями между ними. Поскольку панель Grid предлагает большую часть этой функциональности, я просто унаследовал ее.
Чтобы создать макет, после запуска Loaded я делаю следующее:
1) Read how many children it has and create the appropiate number of rows/colums.
2) Position every existing children in the corresponding row/colum.
3) Create, position and add a GridSplitter for every child.
Этот подход выглядит и работает отлично, но он открывает двери для многих проблем:
Поскольку для каждого ребенка добавлен GridSplitter, число ожидаемых детей удваивается. Если кто-то добавит к нему 3 элемента, Children.Count вернет 6.
Пользователь может вставлять / удалять вещи не в том месте.
Это просто выдает исключение, когда эта Сетка используется в качестве ItemsPanel для ItemsControl, так как в этом случае WPF (не Silverlight) не разрешает прямую дочернюю манипуляцию.
Эти 3 случая - те, которые я уже тестировал, но я уверен, что в зависимости от того, что пользователь сделает с ним, возникнет гораздо больше.
Как выясняется, этот класс следует рассматривать как «детали реализации», поэтому реальный вопрос в том, какой контроль я должен поставить перед пользователем?
Похоже, это должна быть Panel, но я не могу управлять свойством Children, так как оно не виртуальное, и есть также ItemsControl, который, я думаю, мог бы быть хорошим кандидатом, но я действительно не знаю.
Я был бы очень признателен за любые советы или указания, как сделать это правильно.
Заранее спасибо.