繁体   English   中英

在WPF和c#中拖放

[英]Drag and Drop in WPF and 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,而不能拖动其他实例) *当前,我可以拖动任何实例,而不管拖放。

任何人都可以给我一些想法达到同样的效果吗?

这是我创建的示例项目,使用了三个不同的控件,您可以拖放其中的任何一个;如果您想了解更多信息,请访问WPFTutorial。在这里,您可以在任意示例项目中设置放置目标如果没有,则可以将其设置为false。

将一个属性添加到类型“ 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;
}

如果您的新属性设置为true,则在MouseMove(或您选择的任何Drag Source事件)中仅实例化DoDragDrop操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM