2012-04-16 93 views
2

我有一個應用程序,其中包含一個帶正方形(由邊框和底層控件表示)的ItemsControl組成的用戶控件。 把它想象成一個棋盤。在Metro中拖放ItemsControl(C#/ XAML)

由於我的ItemTemplate由一個邊框組成,因此它沒有像GridView或ListView一樣的拖動&的本機支持。我試過對我的格子使用GridView和ListView之前,但GUI變得太遲鈍,所以我切換到了一個簡單的邊框,使它更快。

通過鉤住操作事件我仍然設法得到我的邊框及其內容的拖動行爲(至少在涉及到GUI時)。 但是,當我嘗試將一個正方形(邊框)拖到另一個正方形時,我似乎無法獲取要放開的放置事件。我需要知道目標廣場是哪個。

我知道,因爲我在做我的拖動功能&自己我需要做一些事情來勾住邊界的放下事件,但是什麼?

我也試着訂閱邊界事件PointerEntered,PointerMoved等來找出哪個方形的指針結束了,當按鈕被釋放時,我會知道目標方塊是哪個。這似乎只能在兩個方向上工作(右和下),指針事件在向左或向上移動時似乎不會觸發,奇怪。我讀過somwhere的項目(方塊)有不同的ZIndex,這可能會影響事件的發射。

我已經掙扎了幾個小時,現在真的很感謝一些幫助。

+0

你用DragEnter/DragOver/DragLeave和Drop事件看過嗎? – 2012-07-03 23:50:08

回答

0

創建一個附加屬性並將其掛接到邊界外的父控件,將本地拖放到ItemTemplate的TargetType。

將它連接到PreviewMouseUp和PreviewMouseDown事件。

更多的這種在這裏WPF Tutorial Drag and Drop

0

發現你只需要包括任何你想拖&下降的頂部Thumb對象。 Thumb對象將觸發所需的事件,並且您可以從這些事件中處理所需的任何行爲(例如,您可能希望移動畫布上的底層對象以模擬拖動底層對象)。

你可以看看the MSDN page of Thumb爲你開始。

然後,當您有Thumb通知時,您將以任何適合您的方式獲得潛在客戶,並致電Canvas.SetLeft/Top (object, my new coordinates)。通常,您的新座標將類似Canvas.GetLeft/Top(object) + args.Horizontal/VerticalChange

如您所想,您必須使用Canvas並自己放置對象,而不是使用GridListView