void arrow_MouseLeave(object sender, MouseEventArgs e) { ChangeArrow = sender as ClassLibrary_Graph.Arrow; ChangeArrow = null; if (IsInArrow) { IsInArrow = false; } }
//点击左键,定义圆的圆心并绘制 protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { //执行基本的方法 base.OnMouseLeftButtonDown(e); //连箭头 if (IsInGrid == true) { arrow = new ClassLibrary_Graph.Arrow(); arrow.HeadHeight = 10; arrow.HeadWidth = 10; arrow.Stroke = Brushes.Black; arrow.StrokeThickness = 3; arrow.Tail = ChangeGrid.Name; arrow.X1 = Canvas.GetLeft(ChangeGrid) + ChangeGrid.Width / 2;//箭尾为所在圆的圆心 arrow.Y1 = Canvas.GetTop(ChangeGrid) + ChangeGrid.Height / 2; //添加路由事件 arrow.MouseEnter += new MouseEventHandler(arrow_MouseEnter); arrow.MouseLeave += new MouseEventHandler(arrow_MouseLeave); IsConnecting = true; IsSettingArrow = true; return; } //对箭头进行左击,不添加新圆 if (IsInArrow == true) { return; } //创建一个grid对象,存放圆与标签 grid = new Grid(); grid.Width = 40; grid.Height = 40; ptcenter = e.GetPosition(this.GraphShowCanvas);//返回相对canvas的点位置 grid.Name = pointNames[pointNamesNum]; //创建一个Ellipse对象,并且把它加入到grid中 elips = new Ellipse();//新建一个椭圆对象 elips.Stroke = SystemColors.WindowTextBrush; elips.Width = 40; elips.Height = 40;//固定直径为40 elips.Fill = Brushes.White; grid.Children.Add(elips); //创建一个label对象,并把它加入grid中 label = new Label(); label.Content = pointNames[pointNamesNum++]; label.HorizontalAlignment = HorizontalAlignment.Center;//居中 label.VerticalAlignment = VerticalAlignment.Center; grid.Children.Add(label); //添加路由事件 grid.MouseEnter += new MouseEventHandler(grid_MouseEnter); grid.MouseLeave += new MouseEventHandler(grid_MouseLeave); grid.MouseRightButtonDown += new MouseButtonEventHandler(grid_MouseRightButtonDown); //grid添加到Canvas和gridDic和Graph中 this.GraphShowCanvas.Children.Add(grid); gridDic.Add(grid.Name, grid); Panel.SetZIndex(grid, 1); Canvas.SetLeft(grid, ptcenter.X - grid.Width / 2);//ptcenter的(x,y)为elips的圆心坐标 Canvas.SetTop(grid, ptcenter.Y - grid.Height / 2); ClassLibrary_Graph.Node <string> node = new ClassLibrary_Graph.Node <string>(label.Content.ToString()); graph.SetNode(node); //获取鼠标,即使鼠标离开区域也可获取鼠标消息 CaptureMouse(); IsDrawing = true; }
void arrow_MouseEnter(object sender, MouseEventArgs e) { ChangeArrow = sender as ClassLibrary_Graph.Arrow; IsInArrow = true; }