欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF实现控件拖动的示例代码

程序员文章站 2023-12-17 09:56:52
实现控件拖动的基本原理是对鼠标位置的捕获,同时根据鼠标按键的按下、释放确定控件移动的幅度和时机。 简单示例: 在grid中有一个button,通过鼠标事件改...

实现控件拖动的基本原理是对鼠标位置的捕获,同时根据鼠标按键的按下、释放确定控件移动的幅度和时机。

简单示例:

在grid中有一个button,通过鼠标事件改编button的margin属性,从而改变button在grid中的相对位置。

<grid name="gd">
  <button width=90 height=30 name="btn">button</button>
</grid>

为button控件绑定三个事件:鼠标按下、鼠标移动、鼠标释放

public systemmap()
{
   initializecomponent();
   btn.mouseleftbuttondown += btn_mouseleftbuttondown;
   btn.mousemove += btn_mousemove;
   btn.mouseleftbuttonup += btn_mouseleftbuttonup;
}

定义变量+鼠标按下事件

point pos = new point();
void btn_mouseleftbuttondown(object sender, mousebuttoneventargs e)
{
  button tmp = (button)sender;
  pos = e.getposition(null);
  tmp.capturemouse();
  tmp.cursor = cursors.hand;
}

鼠标移动事件

void btn_mousemove(object sender, mouseeventargs e)
{
   if (e.leftbutton==mousebuttonstate.pressed)
   {
      button tmp = (button)sender;
      double dx = e.getposition(null).x - pos.x + tmp.margin.left;
      double dy = e.getposition(null).y - pos.y + tmp.margin.top;
      tmp.margin = new thickness(dx, dy, 0, 0);
      pos = e.getposition(null);
   }
}

鼠标释放事件

void btn_mouseleftbuttonup(object sender, mousebuttoneventargs e)
{
     button tmp = (button)sender;
     tmp.releasemousecapture();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: