C# 在WPF和c中拖放#
我有三个面板,其中包含三个不同的用户控件,即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而不能拖动其他实例)*目前,我可以拖动任何实例,而不考虑拖放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而不能拖动其他实例)*目前,我可以拖动任何实例,而不考虑拖放 有人能给我一些想法来
有人能给我一些想法来实现同样的目标吗 向类型“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;}此时尝试获取发送方将覆盖用于在拖放时标识控件的字符串