Ответ 1
Ok. Это небольшое изменение в примере, который я создал для Аналогичное требование
Мое намерение состоит в том, чтобы показать, что winforms больше не является вариантом для тех, кто нуждается в серьезном интерфейсе. Исходный образец был создан за 3 человеко-часа.
Вы можете быть удивлены, узнав, что контейнер, в котором хранятся все эти элементы (оба узла и разъемы), на самом деле является ListBox
.
Что стоит отметить:
- Текст "NodeXX" содержится в элементе управления
Thumb
, который позволяет щелкнуть и перетащить. - Соединители также можно выбрать и показать приятную анимацию, когда они есть.
- Левая панель позволяет издавать текущие выбранные значения объекта.
- Функциональность пользовательского интерфейса полностью отделена от данных, которые его содержат. Поэтому все эти узлы и коннекторы представляют собой простые классы с простыми
int
иdouble
свойствами, которые могут быть загружены/сохранены из БД или любого другого источника данных. - Если вам не нравится, как выполняется последовательность кликов, нарисуйте узлы и коннекторы, которые могут быть идеально адаптированы к вашим потребностям.
- Правила WPF.
Edit:
Вторая версия, на этот раз гораздо более похожая на ваш первоначальный скриншот:
- Я добавил понятие
SnapSpot
в уравнение. Это маленькие красные полукруги, которые вы видите вокруг узлов, которые на самом деле связаны сConnector
. -
Я также изменил
Connector
DataTemplate, чтобы использоватьQuadraticBezierSegment
на основеConnector.Start.Location, Connector.MidPoint, and Connector.End.Location
Это позволяет использовать кривые линии в качестве соединителей, а не только прямые.
- Там будет небольшая прямоугольная форма
Thumb
, которая появится, когда вы выберете (щелкните) наConnector
(видимый на снимке экрана), который позволит вам перемещатьMidPoint
кривой. - Вы также можете манипулировать этим значением, вращая колесико мыши при наведении
TextBoxes
в "Средняя точка" на левой панели. - "Свернуть все"
CheckBox
позволяет переключаться между полными и малыми полями, как показано на скриншоте. -
SnapSpot
имеютOffsetX
OffsetY
между 0 и 1, что соответствует их положению относительно родительскогоNode
. Они не ограничены 4 и могут быть любым количеством из них наNode
. -
ComboBoxes
иButtons
не имеют функциональности, но это просто вопрос создания соответствующих свойств и Команды вNode
и привязать их к этому.
Edit2:
Обновлена ссылка для скачивания с более приятной версией.
Редактировать 10/16/2014. Поскольку многие люди, похоже, заинтересованы в этом, я загрузил источник в GitHub.