Bidirectional links

Hey Walter! I now have the need to have bidirectional links between nodes, which is essentially just 2 separate links. The main problem I have is that when users make 2 lines, one goes on top of the other, and you can’t see the first link you made too well. Currently I don’t use Ports on my nodes, because no one likes seeing them on the nodes. If I use ports I would make them movable and only appear on the node when that node is selected, or both nodes when a link is selected. Is there any way my users can just draw a link, and another link and they would auto space between them? I hope what I’m saying makes sense. Thanks Walter!

First, to clear up a potential misunderstanding: all links connect ports and each node can have some number of ports (in addition to texts/shapes/images). Whether or not the port is visible just depends on the GoPort.Style and the Pen and Brush that it has.

Furthermore the actual point at which a link terminates need not be inside or at the edge of a GoPort. So in a GoBasicNode, which has a single Port, the link terminates at the edge of the GoBasicNode's Shape.
But to answer your question, take a look at the StateCharter sample application. That application demonstrates how it uses Bezier style links and how it automatically assigns different GoLink.Curviness values to each one so that they are distinguishable from other links connecting the same pair of nodes.

OOoooo…that’s exactly what I need. Thanks walter! Also I believe I’m going to need to save the link array or points to save the state of curviness modified by the user. How would I read in and apply that point array?

Well, that’s also demonstrated by StateCharter, although it’s trying to be a bit more sophisticated than it really needs to be, by only saving the two middle points instead of all four.