实现拖放类似

本文关键字:拖放 实现 | 更新日期: 2023-09-27 17:57:14

[情况]

我有一个自定义的用户控件(基本上是一个下面有一些文本的 iamge)。在我的程序中,我添加了其中两个并通过以下方式实现一个拖动方法

public partial class CustomItem : UserControl
{
    private bool IsDragging { get; set; }
    private Point clickPosition;
    public CustomItem()
    {
        InitializeComponent();
        this.DataContext = this;
        this.MouseLeftButtonDown += (s, ea) =>
        {
            clickPosition = ea.GetPosition(this.LayoutRoot);
            this.CaptureMouse();
            IsDragging = true;
        };
        this.MouseMove += (s, ea) =>
        {
            if (IsDragging)
            {
                this.transFormThisShit.X = ea.GetPosition(this).X - clickPosition.X;
                this.transFormThisShit.Y = ea.GetPosition(this).Y - clickPosition.Y;
            }
        };
        this.MouseLeftButtonUp += (s, ea) =>
        {
            this.ReleaseMouseCapture();
            IsDragging = false;
        };
    }
}

[问题]

我可以在屏幕上自由移动对象,这正是我想要的。但是当我将这些控件中的 2 个放在彼此之上时,我希望发生一个事件。什么都没有,但不知何故,我似乎无法阅读我放下的控件的任何内容。

有没有可能的方法可以在上面给定的代码中实现这一点,以便当我将此控件的 2 个放在彼此之上时,我可以捕获一个/某个事件,我可以同时获得两个控件?

希望你能理解我的问题。

[编辑]

如果在当前上下文中不可能,请提示一种我可以使用自定义控件的方法。

也许有一些类似拖放控件的东西,我可以"编辑"到与此控件相同的控件中!

实现拖放类似

在 MouseLeftButtonUp 事件中,可以使用检查控件已拖动到的坐标,并将这些坐标与要放到的控件进行比较。 我看不到任何其他明显的方法来做到这一点。

有拖放框架,例如对列表框中的项目进行重新排序,因此,如果您发现您正在实现一些非常标准的东西,则不需要重新发明轮子。