Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF和c中拖放#_C#_Wpf_Drag And Drop - Fatal编程技术网

C# 在WPF和c中拖放#

C# 在WPF和c中拖放#,c#,wpf,drag-and-drop,C#,Wpf,Drag And Drop,我有三个面板,其中包含三个不同的用户控件,即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而不能拖动其他实例)*目前,我可以拖动任何实例,而不考虑拖放 有人能给我一些想法来

我有三个面板,其中包含三个不同的用户控件,即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而不能拖动其他实例)*目前,我可以拖动任何实例,而不考虑拖放


有人能给我一些想法来实现同样的目标吗

向类型“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;
}
在MouseMove(或您选择的任何事件)中,仅当新属性设置为true时才实例化该操作

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

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

当您启动拖动检测您从哪个控件拖动时,然后在拖放检测您试图拖放到哪个控件上,如果它是您不想允许的控件,请不要执行任何与拖放相关的代码。嘿,谢谢您的回复,但它仍然不适用于我:(我仍然可以将控件拖到另一个控件上。当然。代码是这样的:当然。代码是这样的:在控件B上的拖放也可以帮助我获得A.void B_drop(object sender,DragEventArgs e){A usrA=e.Data.GetData(typeof(A))作为A;B usrB=e.Source作为B;//识别被拖放的对象(目前使用字符串)控件strCurrentConverter=usrB.Name;}被拖动后B void B_PreviewMouseLeftButtonUp(对象发送方,System.Windows.Input.MouseButtonEventArgs e){B cntB=sender as B;}此时尝试获取发送方将覆盖用于在拖放时标识控件的字符串