鼠标事件-矩形移动

可以把Rectangle改为其他控件,如Panel,实现类似操作。

在MainPage.xaml中:

<Canvas x:Name="rootCanvas" Width="400" Height="300" Background="Gray">

        <Rectangle Canvas.Left="30" Canvas.Top="30" Fill="Red" Width="50" Height="50"

                   MouseLeftButtonDown="Rectangle_MouseLeftButtonDown" 

                   MouseMove="Rectangle_MouseMove"

                   MouseLeftButtonUp="Rectangle_MouseLeftButtonUp"> 

        </Rectangle> 

    </Canvas>


在MainPage.xaml.cs中:

 private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

        {

            Rectangle item = sender as Rectangle;

            //null是绝对位置,如果是某个控件则是相对这个控件的位置

            mouseVerticalPosition = e.GetPosition(null).Y;

            mouseHorizontalPosition = e.GetPosition(null).X;

            isMouseCaptured = true;

            item.CaptureMouse();//开始捕获鼠标

        }



        private void Rectangle_MouseMove(object sender, MouseEventArgs e)

        {

            Rectangle item = sender as Rectangle;

            if(isMouseCaptured)

            {

                //计算鼠标变化量

                double detaY = e.GetPosition(null).Y - mouseVerticalPosition;

                double detaX = e.GetPosition(null).X - mouseHorizontalPosition;

                //获取矩形新的top和left值

                double newTop = detaY + (double)item.GetValue(Canvas.TopProperty);

                double newLeft = detaX + (double)item.GetValue(Canvas.LeftProperty);

                //设置新的坐标值

                item.SetValue(Canvas.TopProperty, newTop);

                item.SetValue(Canvas.LeftProperty, newLeft);

                //保存现在的鼠标坐标

                mouseHorizontalPosition = e.GetPosition(null).X;

                mouseVerticalPosition = e.GetPosition(null).Y;

            }

            else

            {



            }

        }



        private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)

        {

            Rectangle item = sender as Rectangle;

            //释放鼠标

            isMouseCaptured = false;

            item.ReleaseMouseCapture();

            mouseHorizontalPosition = -1;

            mouseVerticalPosition = -1;

        }

 

你可能感兴趣的:(鼠标事件)