2013-03-22 72 views
1

在下圖中,有6個橙色矩形,它們充當拖放目標。藍色矩形位於橙色矩形的前面。藍色和橙色矩形都是同一個容器的子項。如果拖動目標被其他圖形遮擋,WPF拖放事件不會通過

enter image description here

我遇到的問題是,爲dragenter,DragLeave和drop事件,當光標在一個藍色的矩形沒有得到觸發。藍色的長方形似乎阻止了通過橙色矩形的事件。這意味着用戶必須將光標精確定位在藍色矩形之間才能放置該項目。我想擴展下拉區域以包含整個橙色矩形,同時仍然在橙色矩形前面有藍色矩形。

萬一重要,橙色矩形是FrameworkElements,藍色矩形是DrawingVisuals。 FrameworkElements具有拖放功能,而DrawingVisuals是非常簡單的,而不是。

無論光標是否位於藍色矩形上,只要光標懸停,就能觸發橙色矩形的DragEnter,DragLeave和Drop事件?

+0

你可以製作藍色矩形'IsHitTestVisible =「False」'或者你需要攔截藍色矩形的鼠標事件嗎? – 2013-03-22 01:01:59

+0

@ sa_ddam213我在某個時候嘗試過,但'IsHitTestVisible'似乎不適用於DrawingVisuals。 – devuxer 2013-03-22 01:03:10

+0

啊,那麼也許使用'PreviewDragLeave'等橙色rects – 2013-03-22 01:05:34

回答

1

我想出的最合理的解決方案是將橙色矩形放在藍色的的頂部。

但是,因爲我不想橙色矩形覆蓋了藍色的,我不得不拿出一個視覺透明的長方形加上橙色的帽子組成,如圖此圖像中:

enter image description here

所以,這裏的工作原理是:

  • 我們的目標是能夠通過拖動來改變藍色矩形的順序&下降(我真正的應用程序,可以有三個以上的藍色矩形,和藍色的矩形不是真正的藍色矩形)。
  • 通常,只繪製藍色矩形和透明矩形。 (當然,用戶只能看到藍色矩形。)
  • 如果用戶拖動藍色矩形,則如果光標位於透明矩形上方,則會出現橙色帽子。
  • 一旦光標離開透明矩形,橙色帽子消失。
  • 藍色矩形被刪除後,所有的藍色矩形都按照新的順序重新繪製(並且橙色帽子再次被隱藏)。