wpf 如何实现将一个控件拖到某个控件上后两个控件自动组合成一个新的控件
要实现将一个控件拖到某个控件上后,两个控件自动组合成一个新的控件,可以通过以下步骤实现:
-
在可拖动控件的 MouseMove 事件中,记录鼠标的位置,并将该控件设置为 DragDrop.DoDragDrop 方法的数据源。
-
在目标控件的 DragEnter 事件中,判断拖动的数据源是否符合目标控件的接收类型。
-
如果符合,可以在目标控件的 DragOver 事件中设置光标效果,并记录目标控件的位置。
-
在目标控件的 Drop 事件中,可以将原拖动控件和目标控件组合成一个新的控件,并将其添加到父控件中。
以下是示例代码:
private void OnMouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DataObject data = new DataObject(typeof(MyControl), this);
DragDrop.DoDragDrop(this, data, DragDropEffects.Move);
}
}
private void OnDragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(MyControl)))
{
e.Effects = DragDropEffects.Move;
}
}
private void OnDragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(MyControl)))
{
e.Effects = DragDropEffects.Move;
Point position = e.GetPosition(this);
// 设置光标位置
}
}
private void OnDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(MyControl)))
{
MyControl sourceControl = e.Data.GetData(typeof(MyControl)) as MyControl;
// 创建新的组合控件
MyControl newControl = new MyControl();
// 将原控件和目标控件添加到新的组合控件中
newControl.AddChild(sourceControl);
newControl.AddChild(this);
// 将新的组合控件添加到父控件中
(this.Parent as Panel).Children.Add(newControl);
}
}
``
原文地址: http://www.cveoy.top/t/topic/hiiz 著作权归作者所有。请勿转载和采集!