前几天在网上看见一篇拖动控件的代码,是用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;
}
}
}
就是这么简单,一个简单的鼠标拖动按钮的效果就实现了。希望得到大家的指导,共同进步!
本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。