0

我将 UserControl 对象从一个 Canvas 拖到另一个 Canvas 的目的是放在那里。将鼠标悬停在目的地上时,拖动的对象实际上在其下方。我没有得到 DragEnter、DragOver 或 DragLeave 事件。如果我将对象放在那里,我不会收到 Drop 事件。

我的根对象是一个边框,然后是一个网格。网格覆盖了整个浏览器客户区。它有 8 列。在每一列中都有一个由 XAML 放置的画布。

奇怪行为的示例:当我将一个项目从第 3 列拖到第 4 列(或任何更大)时,对象在画布下滑动。如果我从第 3 列拖到第 2 列(或更小),对象会滑过顶部。因此,zorder 似乎受到画布创建顺序的影响。有人可以澄清一下吗?

每列中的 Canvas 对象都有关联的 DragEnter/Leave 事件,但无论对象在 Canvas 上方还是下方,它们都不会触发。

我发现 Canvas 必须有背景才能获取鼠标事件。列中的每个画布都有一个背景。如果我不拖动任何东西,鼠标事件就会触发。

我快到我的尽头了,我肯定会很感激一些帮助。

谢谢,格雷格

4

1 回答 1

0

@toxoplasmotic:是的。

RE:没有事件触发。事实证明,Drag 事件是连线的,但不提供任何功能。

RE:在各种放置目标画布下方/上方拖动。似乎存在某种由画布创作的“自然秩序”建立的zorder。

但这些并不是真正的重点。

解决方案#1。Silverlight 3 中引入了新的表达式混合行为:MouseDragElementBehavior。它封装了相当多的拖放功能。它保存在 SL4 中。

解决方案#2。在 codeplex 上有一个 Silverlight Toolkit,它(在实验阶段)具有另一个非常好的拖放功能封装。如果您不使用列表框和树视图等,这似乎需要一些额外的编码。

解决方案#3。但是封盖器是这样的:使用 Alex Van Beek 记录良好的代码进行拖放非常容易。它在这里: http: //blogs.infosupport.com/blogs/alexb/a​​rchive /2009/09/07/A-complete-Silverlight-3-drag-and-drop-solution.aspx

成功的关键是将拖动的对象与其父对象解除关联,并将其与浏览器窗口的抽象关联,通常是根对象或另一个透明的画布。困难(不是那么困难)是保持各种坐标系同步。(“从”画布、“到”画布、拖动的对象)

干杯! 格雷格

于 2010-07-13T05:05:29.677 回答