我是 silverlight 的新手——我已经看过教程和所有内容,我正在寻找的是实现拖放所需的高级步骤,也许还有一些(伪)代码只是为了得到一个想法。
任何帮助表示赞赏!
我是 silverlight 的新手——我已经看过教程和所有内容,我正在寻找的是实现拖放所需的高级步骤,也许还有一些(伪)代码只是为了得到一个想法。
任何帮助表示赞赏!
您能否准确解释一下您希望通过 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 返回您的“回收站”元素,您就知道要执行适当的操作。
这有助于回答您的问题吗?
不是 MouseLeftButtonDown 你应该开始捕获的地方,而不是 mouseleftbuttonup?