在slight中实现鼠标拖动控件的功能
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:itlead 阅读 1470
前几天在网上看见一篇拖动控件的代码,是用OnMouseLeftButtonDown触发的,可是在slight中这个事件是不能自动触发的,现发部分新的代码,与大家一起学习学习。。。首先,要在前台页面中

  前几天在网上看见一篇拖动控件的代码,是用OnMouseLeftButtonDown触发的,可是在slight中这个事件是不能自动触发的,现发部分新的代码,与大家一起学习学习。。。

  
  首先,要在前台页面中定义一个元素,在此假定为椭圆(Elipse)吧,然后为该椭圆添加事件如下,

  在后台实现代码如下

  public class ECSDragControl : UserControl

  {

  public bool _isMouseDown;

  public Point _lastPosition;

  public Point _mylastPosition;

  public int zIndex = 0;

  public string ControlName;

  public ECSDragControl()

  {

  _mylastPosition.X = Canvas.GetLeft(this);

  _mylastPosition.Y = Canvas.GetTop(this);

  }

  /// <summary>

  /// 鼠标左键按下

  /// </summary>

  /// <param name="e"></param>

  protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)

  {

  _isMouseDown = true;

  BringToFront();

  this.CaptureMouse();

  _lastPosition = e.GetPosition(Application.Current.RootVisual);

  _mylastPosition = e.GetPosition(Application.Current.RootVisual);

  //_lastPosition = new Point(Canvas.GetLeft(this), Canvas.GetTop(this));

  base.OnMouseLeftButtonDown(e);

  }

  /// <summary>

  /// 鼠标左键松开

  /// </summary>

  /// <param name="e"></param>

  protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)

  {

  _isMouseDown = false;

  zIndex = 0;

  this.Opacity = 1;

  this.ReleaseMouseCapture();

  base.OnMouseLeftButtonUp(e);

  this.Cursor = Cursors.Arrow;

  }

  /// <summary>

  /// 鼠标移动

  /// </summary>

  /// <param name="e"></param>

  protected override void OnMouseMove(MouseEventArgs e)

  {

  if (_isMouseDown)

  {

  Point currentPosition = e.GetPosition(null);

  Point curorPositionToParent = e.GetPosition(this.Parent as UIElement);

  //if (currentPosition.X < 20 || currentPosition.X >780

  //Application.Current.Host.Content.ActualWidth - 100

  //      || currentPosition.Y < 65 || currentPosition.Y > 460)                 //Application.Current.Host.Content.ActualHeight - 70)

  //{

  //    base.OnMouseMove(e);

  //    return;

  //}

  if (curorPositionToParent.X < 0 || curorPositionToParent.X > 760

  || curorPositionToParent.Y < 0 || curorPositionToParent.Y > 500)

  {

  base.OnMouseMove(e);

  return;

  }

  double xPos = currentPosition.X - _lastPosition.X;

  double yPos = currentPosition.Y - _lastPosition.Y;

  Canvas.SetLeft(this, Canvas.GetLeft(this) + xPos);

  Canvas.SetTop(this, Canvas.GetTop(this) + yPos);

  _mylastPosition.X = Canvas.GetLeft(this);

  _mylastPosition.Y = Canvas.GetTop(this);

  _lastPosition = currentPosition;

  this.Opacity = 1;

  this.Cursor = Cursors.Hand;

  }

  base.OnMouseMove(e);

  }

  /// <summary>

  /// 鼠标进入

  /// </summary>

  /// <param name="e"></param>

  protected override void OnMouseEnter(MouseEventArgs e)

  {

  this.Opacity = 1;

  base.OnMouseEnter(e);

  }

  /// <summary>

  /// 鼠标离开

  /// </summary>

  /// <param name="e"></param>

  protected override void OnMouseLeave(MouseEventArgs e)

  {

  this.Opacity = 1;

  base.OnMouseLeave(e);

  }

  /// <summary>

  /// 显示

  /// </summary>

  protected void Show()

  {

  this.Visibility = Visibility.Visible;

  }

  /// <summary>

  /// 隐藏

  /// </summary>

  protected void Hide()

  {

  this.Visibility = Visibility.Collapsed;

  }

  /// <summary>

  /// 显示在前面

  /// </summary>

  protected void BringToFront()

  {

  if (zIndex == 0)

  {

  var oldIndex = this.zIndex;

  var mainCanvas = this.Parent as Canvas;

  foreach (FrameworkElement fElement in mainCanvas.Children)

  {

  Canvas.SetZIndex(fElement, 0);

  }

  Canvas.SetZIndex(this, 2);

  zIndex = 1;

  }

  }

  }



  就是这么简单,一个简单的鼠标拖动按钮的效果就实现了。希望得到大家的指导,共同进步!

 

 本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2