WPF拖拽如果拖动目标被其他图形遮挡,则拖放事件无法通过

时间:2013-03-22 00:58:06

标签: wpf drag-and-drop hittest

在下图中,有6个橙色矩形,用作放置目标。蓝色矩形位于橙色矩形的前面。蓝色和橙色矩形都是同一容器的子项。

enter image description here

我遇到的问题是当光标在蓝色矩形上时,不会触发DragEnter,DragLeave和Drop事件。蓝色矩形似乎阻止事件通过橙色矩形。这意味着用户必须将光标精确定位在蓝色矩形之间才能放下项目。我想扩展拖放区域以包含整个橙色矩形,同时在橙色矩形前面仍然有蓝色矩形。

如果重要的话,橙色矩形是FrameworkElements,蓝色矩形是DrawingVisuals。 FrameworkElements有拖累和放大删除功能,而DrawingVisuals非常简单,但没有。

无论光标是否在蓝色矩形上,如何在光标悬停时触发橙色矩形的DragEnter,DragLeave和Drop事件?

1 个答案:

答案 0 :(得分:1)

我能想到的最合理的解决方案是将橙色矩形放在蓝色矩形的顶部

然而,因为我不想让橙色矩形覆盖蓝色矩形,所以我不得不想出一个由透明矩形和橙色帽子组成的视觉效果,如图所示:

enter image description here

所以,这是它的工作原理:

  • 目标是能够通过拖动和更改来改变蓝色矩形的顺序。 drop(在我的真实应用中,可能有三个以上的蓝色矩形,而蓝色的矩形不是真正的蓝色矩形)。
  • 通常,只绘制蓝色矩形和透明矩形。 (当然,用户只能看到蓝色矩形。)
  • 如果用户拖动蓝色矩形,如果光标位于透明矩形上,则会出现橙色帽子。
  • 一旦光标离开透明矩形,橙色帽子就会消失。
  • 删除蓝色矩形后,所有蓝色矩形都按新顺序重新绘制(橙色帽子再次隐藏)。