在 WPF 和 c# 中拖放

发布于 2024-12-12 06:01:26 字数 371 浏览 0 评论 0原文

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

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

i have three panels which holds three different user controls namely A, B and C.(note: these user controls are generated at runtime). the drag and drop from A to B and B to C forms a valid string in my application.

consider, A1, A2, A3 and A4 as instances of control A. and B1, B2, B3 and B4 as instances of control B and C1 and C2 as instances of control C.

consider, A1 is dragged and dropped on B1. which can then be dropped on C1 or C2.
i want to restrict drag and drop behaviour of control B*(i mean, if i drop on B1 then i should be able to drag only B1 and not other instances).* currently, i can drag any instance irrespective of drop.

could any one give me some idea to achive the same?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

﹉夏雨初晴づ 2024-12-19 06:01:26

这是我创建的 示例 项目使用三个不同的控件,您可以拖放其中任何一个,如果您想了解更多信息,可以访问 WPFTutorial 在示例项目中,您可以在您想要允许放置的位置设置放置目标,如果没有,您可以设置它为假。

Here is the sample project that i have created uses three different controls and you can drag and drop in any of them and if you want to learn more you can visit WPFTutorial here int the sample project you can set drop target where ever you want to allow drop and if not you can set it to false.

抽个烟儿 2024-12-19 06:01:26

向“B”类型控件添加一个属性,指示它可用于将来的拖放操作。

private bool IsActiveDragSource { get; set; }

将处理程序添加到类型“B”控件的“Drop”事件,该处理程序将

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

MouseMove 中的“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);
        }
    }

Add a property to your type "B" control that indicates it is available for future Drag and Drop operations.

private bool IsActiveDragSource { get; set; }

Add a handler to the "Drop" event of your type 'B' control which sets the "IsActiveDragSource" property to true

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

In your MouseMove (or whatever Drag Source event you have chosen) only instantiate the DoDragDrop operation if your new property is set to true.

    private void control_MouseMove(object sender, MouseEventArgs e)
    {
        if (this.IsActiveDragSource)
        {
            // Initialize the drag drop operation
            DragDrop.DoDragDrop(this, this, DragDropEffects.Copy);
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文