private void Target_PositionChanged(object sender, VertexMoveEventArg e) { if (!_isSelfLoop) { var p1 = GetPosition(Source); var p2 = GetPosition(Target); var offset = new Vector(p2.X - p1.X, p2.Y - p1.Y); offset.Normalize(); offset = offset * Target.Width / 2; Arrow.X1 = p1.X + offset.X; Arrow.Y1 = p1.Y + offset.Y; Arrow.X2 = p2.X - offset.X; Arrow.Y2 = p2.Y - offset.Y; if (p1.X < p2.X) { Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2); } else { Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2 - 2 * MarkOffsetY); } Canvas.SetLeft(EdgeTag, (p1.X + p2.X) / 2 - MarkOffsetY); } }
private void Source_PositionChanged(object sender, VertexMoveEventArg e) { if (!_isSelfLoop) { var p1 = GetPosition(Source); var p2 = GetPosition(Target); var offset = new Vector(p2.X - p1.X, p2.Y - p1.Y); offset.Normalize(); offset = offset * Source.Width / 2; Arrow.X1 = p1.X + offset.X; Arrow.Y1 = p1.Y + offset.Y; Arrow.X2 = p2.X - offset.X; Arrow.Y2 = p2.Y - offset.Y; if (p1.X < p2.X) { Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2); } else { Canvas.SetTop(EdgeTag, (p1.Y + p2.Y) / 2 - 2 * MarkOffsetY); } Canvas.SetLeft(EdgeTag, (p1.X + p2.X) / 2 - MarkOffsetY); } else { Arrow.X1 += e.Offset.X; Arrow.Y1 += e.Offset.Y; Arrow.X2 += e.Offset.X; Arrow.Y2 += e.Offset.Y; var position = VisualTreeHelper.GetOffset(SelfLoopPath); Canvas.SetLeft(SelfLoopPath, position.X + e.Offset.X); Canvas.SetTop(SelfLoopPath, position.Y + e.Offset.Y); var markPosition = VisualTreeHelper.GetOffset(EdgeTag); Canvas.SetLeft(EdgeTag, markPosition.X + e.Offset.X); Canvas.SetTop(EdgeTag, markPosition.Y + e.Offset.Y); } }