Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Вопрос к тем, кто работал с WeifenLuo.WinFormsUI.Docking.DockPanel  [new]
keeper89
Member

Откуда:
Сообщений: 81
Здравствуйте!

Помогите пожалуйта, те кто знает как это сделать.
Вопросов собственно 2:
1) как программно расположить 2 окна, например, справа сверху и справа снизу.
Если задать обоим DockState.DockRight, то они отображаются как две вкладки, а надо чтобы одно окно было над другим

2) Есть несколько окон, которые отображаются вкладками, мне надо отследить событие возникающее, когда пользователь с помощью мышки меняет порядок расположения этих окон.
28 окт 10, 07:29    [9689513]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос к тем, кто работал с WeifenLuo.WinFormsUI.Docking.DockPanel  [new]
keeper89
Member

Откуда:
Сообщений: 81
Нашел решение самостоятельно, порывшись в dll контрола.
Решение правда не сильно хорошее, но за не имением других вариантов действую по принципу "главное, что работает".

1) воспользовался двумя перегрузками метода show
первое окно (window1) показываю передавая параметрами dockpanel и dockstate (окно отображается справа на всю высоту dockpanel'а
второе окно показываю передавая параметрами window1.Pane, DockAlignment.Bottom и 0.5
window1.Pane - DockPanel.Pane, в котором показывается первое окно
DockAlignment.Bottom - эвристическим путем выснил, что таким образом второе окно показывается ниже первого (ширина форм одинаковая, длина делится между двумя окнами); если указать Right, то правее (высота форм одинаковая - на всю высоту dockpanel, ширина делится между двумя окнами)...
0.5 - коэффициент, который показывает, долю длины и ширины, которую эта форма оттяпает себе.
т.е. в моем случае высота формы составила 50% от исходной.

с первым вопросом все, надеюсь, что более менее понятно было)
если кого-то данное решение не устраивает, рекомендую (как я сделал) попробовать покопаться в Dll'ке с помощью рефлектора и поизучать тот xml в который можно сохранять текущий dockpanel

2) я подписался на событие Layout у ActiveDocumentPane (Active потому что мне было так удобнее, хотя разницы большой не было, потому что у меня все равно только один Pane с документами).
Плохо то, что событие возникает даже при переключении между листами, причем в этом случае оно срабатывает аж три раза, а в некоторых других случаях даже больше. у меня в обработчике события сразу же стоит условие
if (e.AffectedProperty == null),
позволяющее отбросить большую часть ложных вызовов данного обработчика, но все равно далеко не все (например, из трех вызовов обработчика при переключении между листами, один все же проходит эту проверку)

Решения как я говорил далеко не самые хорошие, более того, довольно сильно привязанные именно к моей задаче, но все же может кому-то помогут или натолкнут на более хорошее решение.
19 ноя 10, 15:39    [9808993]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить