我有一个用户控件,并且在面板上添加了许多实例。控件以列格式添加。然后,我想开始一个拖放操作,该操作允许我在列中交换控件的位置。
我的拖动操作是这样启动的:
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
mousePosition = e.Location;
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
mousePosition = e.Location;
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (e.Button == MouseButtons.Left)
{
dynamic dx = e.X - mousePosition.X;
dynamic dy = e.Y - mousePosition.Y;
//Drag started
if (Math.Abs(dx) >= SystemInformation.DoubleClickSize.Width ||
Math.Abs(dy) >= SystemInformation.DoubleClickSize.Height)
{
IsDragging = true;
Capture = true;
}
//Dragged upon
if (!IsDragging)
{
//item is always null
var item = ((MyControl)Parent).DraggedItem;
}
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
if (IsDragging)
{
IsDragging = false;
Capture = false;
}
}
父母的财产DraggedItem
为:
public MyControl DraggedItem
{
get
{
return this.Controls.Cast<MyControl>().SingleOrDefault(x => x.IsDragging == true);
}
}
我要在此处实现的目标是,一旦启动拖动,便应通知其他控件鼠标在它们上方并且正在拖动({{1}中的!IsDragging
条件}。
但是,问题是OnMouseMove
始终为空。我尝试过不设置DraggedItem
属性,但是它仍然不起作用。
我需要让父母对其控件进行点击测试吗?