Ух, неплохо как контроль!
Я делаю что-то подобное, но это не так просто.
1) ИМХО, DragCanvas - это основной способ размещения + перетаскивания элементов. Поскольку вам придется снова размещать метки (узлы), дуги и метки (вес дуг), я думаю, что DragCanvas будет сложнее, чем написать собственный элемент управления самостоятельно.
Не все так просто с шаблонами: иногда гораздо лучше "старый" подход, похожий на winforms, или даже гибридный способ.
2) Как уже говорилось, я бы создал панель, основанную на Canvas, в которой будет размещено несколько элементов UIE (метки, дуги и т. Д.). Все они должны управляться моделью + viewmodel. В начале это немного сложнее, но в будущем это принесет вам много удовлетворения и гибкости.
3) Я не думаю, что холст даст вам головную боль! Холст, полный элементов, всегда имеет нулевой размер. Это приводит к "головным болям" для тех, кто пытается добавить просмотрщика.
Вместо этого класс, производный от Canvas (см. Выше), должен переопределять метод MeasureOverride, чтобы его размер соответствовал любому размещаемому объекту. Однако немного раздражает тот факт, что вы не можете использовать отрицательные координаты (это вызовет проблемы с прокруткой).
Трудно в нескольких строках описать всю работу за подобным «редактором». Задача не из легких, а проблем много.
Надеюсь, это поможет, в любом случае.
Приветствия