[WPF] Аналог SplitContainer WinForms
От: vit_as Россия  
Дата: 20.04.11 05:49
Оценка:
Необходимо реализовать аналог SplitContainer для WPF, с возможностью деления контрола на 4 части и тасканием сплиттера за центральную часть в обоих направлениях.

Что лучше использовать для этой цели? Наследоваться от Panel или Control.

Хотелось бы, чтобы сплитеры добавлялись и удалялись автоматически при изменении свойства деления контрола (None, Horizontal, Vertical или Horizontal | Vertical). В случае панели сплитеры будут находиться в открытой коллекции Children, что не очень хорошо, т.к. колекцию можно модифицировать. Но наследование от панели логически более правильное.

Какие есть мнения на этот счет?
Re: [WPF] Аналог SplitContainer WinForms
От: notacat  
Дата: 20.04.11 08:50
Оценка: +1
GridSpliiter смотрели?
Re[2]: [WPF] Аналог SplitContainer WinForms
От: vit_as Россия  
Дата: 20.04.11 08:59
Оценка:
Здравствуйте, notacat, Вы писали:

N>GridSpliiter смотрели?


Да, в данный момент используется Grid с GridSplitter'ами, не устраивает тем, что необходима возможность таскания за перекрестие, когда панель делится вертикально и горизонтально.
Re[3]: [WPF] Аналог SplitContainer WinForms
От: DmitryMS  
Дата: 20.04.11 09:26
Оценка:
Без поддержки дизайн тайма контрол делается за день (молодые украинские программисты и не москвичи могут сделать за час — корректная работа не гарантирована).

Дарю идею — весь "контрол" это AttachedBehavior для Grid'a. The former всегда имеет две строки & два столбца. В самом простом случае высота второй строки и ширина второго столбца "*". Это без поддержки пропорционального ресайза.

Сам behavior имеет едиснтвенное свойство CrossSplitterPosition of Point type. CrossSplitterPosition.Х — first col's width & CrossSplitterPosition.Y — first row's height.

Завершающий этап — создается draggable крестовина, перемещения которрй привязаны к CrossSplitterPosition свойству behavior'a.
Re[4]: [WPF] Аналог SplitContainer WinForms
От: DmitryMS  
Дата: 20.04.11 09:30
Оценка:
Вот статья, описывающая на пальцах, как сделать draggable елемент. Самой большой ошибкой было бы пробегать к CLR населдованию и протаскивать форматирование крестовины и назанчение детей панели через непредназначенные для этого механизмы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.