private void NodeLinked(NodeConnection from, NodeConnection to) { Debug.WriteLine("Linked {0} -> {1}", from.ConnectedNodeId, to.ConnectedNodeId); NodeBase nodeFrom = null; NodeBase nodeTo = null; foreach (var child in this.canvasDiagram.Children) { if (child is NodeBase) { var node = child as NodeBase; if (node.NodeId == from.ConnectedNodeId) { nodeFrom = node; } if (node.NodeId == to.ConnectedNodeId) { nodeTo = node; } } } var fromPoint = nodeFrom.GetPosition(); var toPoint = nodeTo.GetPosition(); Point distance = new Point(toPoint.X - fromPoint.X, toPoint.Y - fromPoint.Y); BezierSegment segment = new BezierSegment(); segment.Point1 = new Point(fromPoint.X + distance.X / 3, fromPoint.Y - 100); segment.Point2 = new Point(fromPoint.X + distance.X * 2 / 3, toPoint.Y + 100); segment.Point3 = nodeTo.GetPosition(); PathFigure figure = new PathFigure(); figure.StartPoint = nodeFrom.GetPosition(); figure.Segments.Add(segment); PathGeometry geo = new PathGeometry(); geo.Figures.Add(figure); Windows.UI.Xaml.Shapes.Path path = new Windows.UI.Xaml.Shapes.Path(); path.StrokeThickness = 2; path.Stroke = new SolidColorBrush(Colors.Black); path.Data = geo; this.canvasDiagram.Children.Add(path); }