1

在下图中,有 6 个橙色矩形,它们充当放置目标。蓝色矩形在橙色矩形的前面。蓝色和橙色矩形都是同一个容器的子级。

在此处输入图像描述

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

如果它很重要,橙色矩形是 FrameworkElements,蓝色矩形是 DrawingVisuals。FrameworkElements 具有拖放功能,而 DrawingVisuals 非常简单,没有。

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

4

1 回答 1

1

我能想出的最合理的解决方案是将橙色矩形放在蓝色矩形之上。

但是,因为我不希望橙色矩形覆盖蓝色矩形,所以我必须想出一个由透明矩形和橙色帽子组成的视觉效果,如下图所示:

在此处输入图像描述

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

  • 目标是能够通过拖放更改蓝色矩形的顺序(在我的真实应用中,蓝色矩形可能不止三个,而蓝色矩形并不是真正的蓝色矩形)。
  • 通常,只绘制蓝色矩形和透明矩形。(当然,用户只看到蓝色矩形。)
  • 如果用户拖动蓝色矩形,如果光标位于透明矩形上,则会出现橙色帽子。
  • 一旦光标离开透明矩形,橙色帽子就会消失。
  • 放下蓝色矩形后,所有蓝色矩形都以新顺序重新绘制(橙色帽子再次被隐藏)。
于 2013-04-06T02:07:46.607 回答