void tg_Area_VertexSelected(object sender, VertexSelectedEventArgs args) { if (args.MouseArgs.LeftButton == MouseButtonState.Pressed && tg_edgeMode.SelectedIndex == 1) { tg_Area.GenerateEdgesForVertex(args.VertexControl, (EdgesType)tg_edgeType.SelectedItem); } if (args.MouseArgs.RightButton == MouseButtonState.Pressed) { args.VertexControl.ContextMenu = new System.Windows.Controls.ContextMenu(); var menuitem = new System.Windows.Controls.MenuItem() { Header = "Delete item", Tag = args.VertexControl }; menuitem.Click += tg_deleteitem_Click; args.VertexControl.ContextMenu.Items.Add(menuitem); var str = new StringBuilder(); using (var writer = new StringWriter(str)) XamlWriter.Save(args.VertexControl.ContextMenu.Template, writer); Debug.Write(str); } }
void dg_Area_VertexSelected(object sender, VertexSelectedEventArgs args) { if (args.MouseArgs.LeftButton == MouseButtonState.Pressed) { if (Keyboard.IsKeyDown(Key.LeftCtrl)) { //if (DragBehaviour.GetIsDragging(args.VertexControl)) return; SelectVertex(args.VertexControl); } } else if (args.MouseArgs.RightButton == MouseButtonState.Pressed) { args.VertexControl.ContextMenu = new System.Windows.Controls.ContextMenu(); var mi = new System.Windows.Controls.MenuItem() { Header = "Delete item", Tag = args.VertexControl }; mi.Click += mi_Click; args.VertexControl.ContextMenu.Items.Add(mi); } }
void dg_Area_VertexSelectedForED(object sender, GraphX.Models.VertexSelectedEventArgs args) { if (_isInEDMode) { 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 dedge = new DataEdge(_edVertex.Vertex as DataVertex, _edFakeDV); _edEdge = new EdgeControl(_edVertex, null, dedge) { ManualDrawing = true }; dg_Area.AddEdge(dedge, _edEdge); dg_Area.LogicCore.Graph.AddVertex(_edFakeDV); dg_Area.LogicCore.Graph.AddEdge(dedge); _edEdge.SetEdgePathManually(_edGeo); } else if (_edVertex != args.VertexControl) //finish draw { _edEdge.Target = args.VertexControl; var dedge = _edEdge.Edge as DataEdge; dedge.Target = args.VertexControl.Vertex as DataVertex; var fig = _edGeo.Figures[0]; var seg = fig.Segments[_edGeo.Figures[0].Segments.Count - 1] as PolyLineSegment; if (seg.Points.Count > 0) { var targetPos = _edEdge.Target.GetPosition(); var sourcePos = _edEdge.Source.GetPosition(); //get the size of the source var sourceSize = new Size() { Width = _edEdge.Source.ActualWidth, Height = _edEdge.Source.ActualHeight }; var targetSize = new Size() { Width = _edEdge.Target.ActualWidth, Height = _edEdge.Target.ActualHeight }; var src_start = seg.Points.Count == 0 ? fig.StartPoint : seg.Points[0]; var src_end = seg.Points.Count > 1 ? (seg.Points[seg.Points.Count - 1] == targetPos ? seg.Points[seg.Points.Count - 2] : seg.Points[seg.Points.Count - 1]) : fig.StartPoint; Point p1 = GeometryHelper.GetEdgeEndpoint(sourcePos, new Rect(sourceSize), src_start, _edEdge.Source.MathShape); Point p2 = GeometryHelper.GetEdgeEndpoint(targetPos, new Rect(targetSize), src_end, _edEdge.Target.MathShape); fig.StartPoint = p1; if (seg.Points.Count > 1) { seg.Points[seg.Points.Count - 1] = p2; } } GeometryHelper.TryFreeze(_edGeo); _edEdge.SetEdgePathManually(new PathGeometry(_edGeo.Figures)); _isInEDMode = false; clearEdgeDrawing(); } } }