在WPF和c#中拖放

本文关键字:拖放 WPF | 更新日期: 2023-09-27 18:12:33

我有三个面板,其中包含三个不同的用户控件,即A, B和c(注意:这些用户控件在运行时生成)。从A到B和B到C的拖放在我的应用程序中形成了一个有效的字符串。

考虑A1、A2、A3和A4为控制a的实例,B1、B2、B3和B4为控制B的实例,C1和C2为控制c的实例。

考虑,A1被拖放到B1上。然后丢到C1或C2上。我想限制控件B*的拖放行为(我的意思是,如果我在B1上拖放,那么我应该能够只拖B1而不是其他实例)。*目前,我可以拖动任何实例,而不需要拖放。

谁能给我一些主意来达到同样的效果?

在WPF和c#中拖放

这是我创建的样例项目,使用三种不同的控件,你可以拖放其中的任何一个,如果你想了解更多,你可以访问WPFTutorial在这里的样例项目中,你可以在任何你想要允许拖放的地方设置拖放目标,如果不是,你可以将其设置为false。

为type "B"控件添加一个属性,该属性指示该控件可用于将来的拖放操作。

private bool IsActiveDragSource { get; set; }

为B类控件的"Drop"事件添加一个处理程序,将"IsActiveDragSource"属性设置为true

private void label_Drop(object sender, DragEventArgs e)
{
     // Handle the drop from control A
     this.IsActiveDragSource = true;
}

在你的鼠标移动(或任何拖动源事件你已经选择),只有实例化DoDragDrop操作,如果你的新属性被设置为true。

    private void control_MouseMove(object sender, MouseEventArgs e)
    {
        if (this.IsActiveDragSource)
        {
            // Initialize the drag drop operation
            DragDrop.DoDragDrop(this, this, DragDropEffects.Copy);
        }
    }