void Area_VertexSelected(object sender, GraphX.Models.VertexSelectedEventArgs args) { if (args.MouseArgs.LeftButton == MouseButtonState.Pressed) { //if (DragBehaviour.GetIsDragging(args.VertexControl)) return; SelectVertex(args.VertexControl); if (IsInEditMode && _status.HasFlag(GraphExplorerStatus.CreateLinkSelectSource)) { if (_edVertex == null) //select starting vertex { _edVertex = args.VertexControl; _edFakeDV = new DataVertex() { ID = -666 }; _edGeo = new PathGeometry(new PathFigureCollection() { new PathFigure() { IsClosed = false, StartPoint = _edVertex.GetPosition(), Segments = new PathSegmentCollection() { new PolyLineSegment(new List <Point>() { new Point() }, true) } } }); var pos = zoomctrl.TranslatePoint(args.VertexControl.GetPosition(), Area); var lastseg = _edGeo.Figures[0].Segments[_edGeo.Figures[0].Segments.Count - 1] as PolyLineSegment; lastseg.Points[lastseg.Points.Count - 1] = pos; var dedge = new DataEdge(_edVertex.Vertex as DataVertex, _edFakeDV); _edEdge = new EdgeControl(_edVertex, null, dedge) { ManualDrawing = true }; Area.AddEdge(dedge, _edEdge); Area.Graph.AddVertex(_edFakeDV); Area.Graph.AddEdge(dedge); _edEdge.SetEdgePathManually(_edGeo); _status = GraphExplorerStatus.CreateLinkSelectTarget; _viewmodel.PostStatusMessage("Select Target Node"); } else if (_edVertex != args.VertexControl && _status.HasFlag(GraphExplorerStatus.CreateLinkSelectTarget)) //finish draw { _viewmodel.CreateEdge((_edVertex.Vertex as DataVertex).Id, (args.VertexControl.Vertex as DataVertex).Id); ClearEdgeDrawing(); _status = GraphExplorerStatus.Ready; tbnNewEdge.IsChecked = false; } } } else if (args.MouseArgs.RightButton == MouseButtonState.Pressed && IsInEditMode) { args.VertexControl.ContextMenu = new System.Windows.Controls.ContextMenu(); var miDeleteVertex = new System.Windows.Controls.MenuItem() { Header = "Delete", Tag = args.VertexControl }; miDeleteVertex.Click += miDeleteVertex_Click; args.VertexControl.ContextMenu.Items.Add(miDeleteVertex); } }