Esempio n. 1
0
 void arrow_MouseLeave(object sender, MouseEventArgs e)
 {
     ChangeArrow = sender as ClassLibrary_Graph.Arrow;
     ChangeArrow = null;
     if (IsInArrow)
     {
         IsInArrow = false;
     }
 }
Esempio n. 2
0
        //点击左键,定义圆的圆心并绘制
        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;
        }
Esempio n. 3
0
 void arrow_MouseEnter(object sender, MouseEventArgs e)
 {
     ChangeArrow = sender as ClassLibrary_Graph.Arrow;
     IsInArrow   = true;
 }