How can I make a Rectangle on a canvas which is draggable?

前端 未结 1 1028
灰色年华
灰色年华 2021-01-03 05:15

I have these three functions to trigger the events. I already have a static version of my needs, but I need a dynamically version of it.

    bool ca         


        
1条回答
  •  情书的邮戳
    2021-01-03 05:48

    I'm sure this sample code will help you.

    XAML:

    
        
            
            
        
    
        
            

    C#:

        bool drag = false;
        Point startPoint;
    
        public MainWindow()
        {
            InitializeComponent();
        }
    
        // this creates and adds rectangles dynamically
        private void addRectangleButton_Click(object sender, RoutedEventArgs e)
        {
            // create new Rectangle
            Rectangle rectangle = new Rectangle();
            // assign properties
            rectangle.Width = 100;
            rectangle.Height = 50;
            rectangle.Fill = new SolidColorBrush(Colors.RoyalBlue);
            // assign handlers
            rectangle.MouseDown += rectangle_MouseDown;
            rectangle.MouseMove += rectangle_MouseMove;
            rectangle.MouseUp += rectangle_MouseUp;
            // set default position
            Canvas.SetLeft(rectangle, 0);
            Canvas.SetTop(rectangle, 0);
            // add it to canvas
            canvas.Children.Add(rectangle);
        }
    
        private void rectangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            // start dragging
            drag = true;
            // save start point of dragging
            startPoint = Mouse.GetPosition(canvas);
        }
    
        private void rectangle_MouseMove(object sender, MouseEventArgs e)
        {
            // if dragging, then adjust rectangle position based on mouse movement
            if (drag)
            {
                Rectangle draggedRectangle = sender as Rectangle;
                Point newPoint = Mouse.GetPosition(canvas);
                double left = Canvas.GetLeft(draggedRectangle);
                double top = Canvas.GetTop(draggedRectangle);
                Canvas.SetLeft(draggedRectangle, left + (newPoint.X - startPoint.X));
                Canvas.SetTop(draggedRectangle, top + (newPoint.Y - startPoint.Y));
    
                startPoint = newPoint;
            }
        }
    
        private void rectangle_MouseUp(object sender, MouseButtonEventArgs e)
        {
            // stop dragging
            drag = false;
        }
    

    0 讨论(0)
提交回复
热议问题