实现拖放类似

时间:2011-05-20 18:32:51

标签: c# silverlight drag-and-drop

[现状]

我有一个自定义的userControl(基本上是一个带有一些文本的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个放在另一个上面时,我可以捕获一个/我可以获得两个控件的事件?

希望你理解我的问题。

[编辑]

如果在当前情况下不可能,请提示我可以使用自定义控件进行此操作..

也许有类似拖放控件的东西我可以“编辑”到与此控件相同的位置!

1 个答案:

答案 0 :(得分:0)

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

有一些拖放框架可以用来重新排序列表框中的项目,所以如果你发现你正在实现一些非常标准的东西,你就不需要重新发明轮子了。