在silverlight中实现拖放是多么容易?

时间:2009-03-04 09:28:32

标签: silverlight drag-and-drop

我是Silverlight的新手 - 我已经看到tutorials所有,我正在寻找的是实现拖放所需的高级步骤以及可能需要的一些(伪)代码一个想法。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

您是否可以通过拖放Silverlight来准确解释您想要实现的目标?您链接到此页面的链接的问题的最佳答案: http://www.adefwebserver.com/DotNetNukeHELP/Misc/Silverlight/DragAndDropTest/

这包含一个带有源实现拖放的示例项目(巧合的是,基于我为Silverlight 2的beta 1制作的样本:-))。这段代码不适合您的需求?

编辑: 拖放实现的基本框架如下所示:

bool isDragging = false;

void elementMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (element.CaptureMouse())
    {
        isDragging = true;
        element.MouseMove += elementMouseMove;
        //start drag code goes here
    }
}

void elementMouseMove(object sender, MouseEventArgs e)
{
    //Drag code goes here
}

void element_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (isDragging)
    {
        element.ReleaseMouseCapture();
        isDragging = false;
        element.MouseMove -= elementMouseMove;

        //Drop code goes here
    }
}

将MouseLeftButtonUp / Down处理程序添加到要拖动的元素。

在MouseMove事件处理程序中,添加要在拖动期间执行的代码:例如更改Canvas.Top和Canvas.Left以匹配鼠标位置。您可以从事件参数中获取鼠标位置。您可能希望获得相对于元素容器的位置。

在MouseLeftButtonUp事件处理程序中,添加在“drop”发生时执行的代码。例如,您可能希望实现可以拖动元素的“回收站”。在这种情况下,您可能想知道在放置点鼠标下方的元素。您可以使用VisualTreeHelper.FindElementsAtHostCoordinates,相对于应用程序的根传递鼠标位置(使用e.GetPosition(null))。然后,如果您的“回收站”元素由FindElementsInHostCoordinates返回,您就知道要执行相应的操作。

这有助于回答您的问题吗?

答案 1 :(得分:0)

不是MouseLeftButtonDown,你应该在哪里开始捕获,而不是在mouseleftbuttonup上?