我是Silverlight的新手 - 我已经看到tutorials所有,我正在寻找的是实现拖放所需的高级步骤以及可能需要的一些(伪)代码一个想法。
任何帮助表示赞赏!
答案 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上?