从ListBoxDragDropTarget拖放到PanelDragDropTarget

时间:2010-09-22 19:37:47

标签: silverlight silverlight-4.0 drag-and-drop silverlight-toolkit

使用Silverlight 4工具包,是否可以从ListBox拖放到Canvas(并在下拉到Canvas中获取事件)?

我能够编写代码以从PanelDragDropTarget内的包装面板拖放到画布,但事件处理程序在发生删除时没有触发。当我尝试从ListBoxDragDrop内的ListBox拖放到PanelDragDropTarget内的Canvas时,没有发生删除(并且事件处理程序没有触发)。在“画布”上拖动时,光标变为带有向上/向下箭头的光标。

谢谢,特德

3 个答案:

答案 0 :(得分:2)

在穆罕默德的帖子中描述的步骤之后,仍然存在一些问题。当您将鼠标悬停在目标Panel元素上时,拖放指示符看起来像滚动操作(并且我需要带箭头的拖放指示符 - 用于移动操作)。为了摆脱这种影响,我创建了一个派生自PanelDragDropTarget的类,在那里我覆盖了导致问题的两个方法。

public class FixedPanelDragDropTarget : PanelDragDropTarget
{
    protected override bool CanAddItem(Panel itemsControl, object data)
    {
        return true;
    }

    protected override void InsertItem(Panel itemsControl, int index, object data)
    {
        //
    }

}

之后在FixedPanelDragDropTarget.Drop事件的处理程序中,我们可以手动创建被删除元素的intance,而其余部分看起来应该是这样。

答案 1 :(得分:1)

出现此问题的原因是ListBoxDragDropTarget和PanelDragDropTarget的编写方式不同。在2个ListBoxDragDropTargets之间拖动时,您正在传输绑定到控件的数据,而在2个PanelDragDropTargets之间拖动会传输“拾取”的UIElement。

这就是为什么需要Dmitriyz的回答。 PanelDragDropTarget检查您从ListBoxDragDropTarget拖动的元素是否是UIElement,并且由于它不是,它只是一个简单的数据片段,它为CanAddItem返回false。它禁用了丢弃的能力。因此,您可以使用向上/向下箭头看到光标。

要使一切正常,您必须从PanelDragDropTarget继承并使用该子类。它至少需要覆盖CanAddItem方法:

public class ElementDragDropTarget : PanelDragDropTarget
{
    protected override bool CanAddItem(Panel itemsControl, object data)
    {
        return true;
    }

    protected override void InsertItem(Panel itemsControl, int index, object data)
    {
        // Do Work
    }
}

答案 2 :(得分:0)

以下帖子在silverlight论坛中回答了这个问题

http://forums.silverlight.net/forums/p/140806/463877.aspx

-Mohamed