WPF CustomControl дизайн советы - PullRequest
       9

WPF CustomControl дизайн советы

1 голос
/ 16 сентября 2011

Мне нужно разработать пользовательский элемент управления WPF, чтобы показать расположение и подключение узлов в беспроводной ячеистой сети. Пользователь должен иметь возможность перетаскивать узлы вокруг. Холст должен быть увеличен, а полосы прокрутки должны отображаться по мере необходимости, если элементы перетаскиваются из доступного пространства. Может потребоваться возможность увеличения / уменьшения. Вначале я использую CustomControl, полученный из ListBox, с ItemsPanelTemplate на основе Canvas. Чтобы заставить вещи двигаться, я использую Josh Smiths DragCanvas, который позволяет перетаскивать UIElements потомков холста. Мой класс "node" в настоящее время не является производным от UIElement (DragCanvas в настоящее время работает с ListBoxItems, которые обертывают мои узлы).
1. Это разумный подход или мне следует отказаться от идеи ListBox и перейти на более низкий уровень?
2. Мне нужно наложить линии связи между узлами - в настоящее время я не уверен, как это сделать (как класс UIElement, который является частью ControlTemplate?)
3. У нескольких людей, кажется, болит голова от прокрутки на полотнах - это будет проблемой?
Любой общий или конкретный совет, наиболее ценный. Basic target look of final control

1 Ответ

1 голос
/ 16 сентября 2011

Ух, неплохо как контроль!

Я делаю что-то подобное, но это не так просто.

1) ИМХО, DragCanvas - это основной способ размещения + перетаскивания элементов. Поскольку вам придется снова размещать метки (узлы), дуги и метки (вес дуг), я думаю, что DragCanvas будет сложнее, чем написать собственный элемент управления самостоятельно.

Не все так просто с шаблонами: иногда гораздо лучше "старый" подход, похожий на winforms, или даже гибридный способ.

2) Как уже говорилось, я бы создал панель, основанную на Canvas, в которой будет размещено несколько элементов UIE (метки, дуги и т. Д.). Все они должны управляться моделью + viewmodel. В начале это немного сложнее, но в будущем это принесет вам много удовлетворения и гибкости.

3) Я не думаю, что холст даст вам головную боль! Холст, полный элементов, всегда имеет нулевой размер. Это приводит к "головным болям" для тех, кто пытается добавить просмотрщика.

Вместо этого класс, производный от Canvas (см. Выше), должен переопределять метод MeasureOverride, чтобы его размер соответствовал любому размещаемому объекту. Однако немного раздражает тот факт, что вы не можете использовать отрицательные координаты (это вызовет проблемы с прокруткой).

Трудно в нескольких строках описать всю работу за подобным «редактором». Задача не из легких, а проблем много.

Надеюсь, это поможет, в любом случае.

Приветствия

...