void AddEdge(Vertex from, Vertex to, bool direct, int weight = 0) { EdgeShape l = new EdgeShape(); CenterConverter cc1 = new CenterConverter(); MultiBinding b1 = new MultiBinding(); b1.Converter = cc1; b1.Bindings.Add(new Binding() { Path = new PropertyPath("X"), Source = from }); b1.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualWidthProperty.Name), Source = from }); CenterConverter cc2 = new CenterConverter(); MultiBinding b2 = new MultiBinding(); b2.Converter = cc2; b2.Bindings.Add(new Binding() { Path = new PropertyPath("Y"), Source = from }); b2.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualHeightProperty.Name), Source = from }); CenterConverter cc3 = new CenterConverter(); MultiBinding b3 = new MultiBinding(); b3.Converter = cc3; b3.Bindings.Add(new Binding() { Path = new PropertyPath("X"), Source = to }); b3.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualWidthProperty.Name), Source = to }); CenterConverter cc4 = new CenterConverter(); MultiBinding b4 = new MultiBinding(); b4.Converter = cc4; b4.Bindings.Add(new Binding() { Path = new PropertyPath("Y"), Source = to }); b4.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualHeightProperty.Name), Source = to }); HalfConverter ccg = new HalfConverter(); Binding bg = new Binding(); bg.Converter = ccg; bg.Path = new PropertyPath(Vertex.ActualWidthProperty); bg.Source = to; parentCanvas.Children.Add(l); l.SetBinding(EdgeShape.X1Property, b1); l.SetBinding(EdgeShape.Y1Property, b2); l.SetBinding(EdgeShape.X2Property, b3); l.SetBinding(EdgeShape.Y2Property, b4); l.SetBinding(EdgeShape.GapProperty, bg); l.HasArrow = true; l.StrokeThickness = 1.5; l.HeadWidth = 10; l.HeadHeight = 3; l.HasArrow = direct; l.MouseDown += this.MyMouseDown; //Binding wi = new Binding(); //wi.Path = new PropertyPath(EdgeShape.ActualWidthProperty); //wi.Source = l; //parentCanvas.SetBinding(Canvas.WidthProperty, wi); //Binding he = new Binding(); //he.Path = new PropertyPath(EdgeShape.ActualHeightProperty); //he.Source = l; //parentCanvas.SetBinding(Canvas.HeightProperty, he); if (inverted) { l.Stroke = Brushes.DarkRed; if (minus) { minus = false; l.Curveture = -1 * linenum * 100; } else { minus = true; l.Curveture = linenum * 100; linenum++; } } else { l.Stroke = Brushes.DarkGreen; if (minus) { minus = false; l.Curveture = linenum * 100; } else { minus = true; l.Curveture = -1 * linenum * 100; linenum++; } } EdgeInfo t = new EdgeInfo(); t.MouseDown += this.MyMouseDown; CenterConverter2 cc5 = new CenterConverter2(); MultiBinding b5 = new MultiBinding(); b5.Converter = cc5; b5.Bindings.Add(new Binding() { Path = new PropertyPath(EdgeShape.TopXProperty.Name), Source = l }); b5.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualWidthProperty.Name), Source = t }); CenterConverter2 cc6 = new CenterConverter2(); MultiBinding b6 = new MultiBinding(); b6.Converter = cc6; b6.Bindings.Add(new Binding() { Path = new PropertyPath(EdgeShape.TopYProperty.Name), Source = l }); b6.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualHeightProperty.Name), Source = t }); //Binding tbX = new Binding(); //tbX.Source = l; //tbX.Path = new PropertyPath(EdgeShape.TopXProperty); //Binding tbY = new Binding(); //tbY.Source = l; //tbY.Path = new PropertyPath(EdgeShape.TopYProperty); t.SetBinding(EdgeInfo.eiXProperty, b5); t.SetBinding(EdgeInfo.eiYProperty, b6); t.PropertyChanged += Changed; parentCanvas.Children.Add(t); t.Txt = weight.ToString(); }
void CreateEdge(int from, int to) { from += start - 1; to += start - 1; Edge l = new Edge(); CenterConverter cc1 = new CenterConverter(); MultiBinding b1 = new MultiBinding(); b1.Converter = cc1; b1.Bindings.Add(new Binding() { Path = new PropertyPath("X"), Source = mainCanvas.Children[from] }); b1.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualWidthProperty.Name), Source = mainCanvas.Children[from] }); CenterConverter cc2 = new CenterConverter(); MultiBinding b2 = new MultiBinding(); b2.Converter = cc2; b2.Bindings.Add(new Binding() { Path = new PropertyPath("Y"), Source = mainCanvas.Children[from] }); b2.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualHeightProperty.Name), Source = mainCanvas.Children[from] }); CenterConverter cc3 = new CenterConverter(); MultiBinding b3 = new MultiBinding(); b3.Converter = cc3; b3.Bindings.Add(new Binding() { Path = new PropertyPath("X"), Source = mainCanvas.Children[to] }); b3.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualHeightProperty.Name), Source = mainCanvas.Children[to] }); CenterConverter cc4 = new CenterConverter(); MultiBinding b4 = new MultiBinding(); b4.Converter = cc4; b4.Bindings.Add(new Binding() { Path = new PropertyPath("Y"), Source = mainCanvas.Children[to] }); b4.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualHeightProperty.Name), Source = mainCanvas.Children[to] }); CenterConverter ccg = new CenterConverter(); MultiBinding bg = new MultiBinding(); bg.Converter = ccg; bg.Bindings.Add(new Binding() { Path = new PropertyPath(Canvas.MinWidthProperty), Source = mainCanvas }); bg.Bindings.Add(new Binding() { Path = new PropertyPath(Vertex.ActualHeightProperty.Name), Source = mainCanvas.Children[to] }); mainCanvas.Children.Add(l); l.SetBinding(Edge.X1Property, b1); l.SetBinding(Edge.Y1Property, b2); l.SetBinding(Edge.X2Property, b3); l.SetBinding(Edge.Y2Property, b4); l.SetBinding(Edge.GapProperty, bg); l.Stroke = Brushes.Blue; l.HasArrow = true; l.StrokeThickness = 6; l.HeadWidth = 28; l.HeadHeight = 6; }