簡體   English   中英

在Metro(C#/ XAML)中使用ItemsControl進行拖放

[英]Drag & Drop with ItemsControl in Metro (C#/XAML)

我有一個應用程序,其中有一個由正方形的ItemsControl組成的用戶控件(由邊框和基礎控件表示)。 可以把它想像成棋盤。

由於我的ItemTemplate由邊框組成,因此它沒有像GridView或ListView這樣的對拖放的原生支持。 我以前嘗試將GridView和ListView都用於我的正方形,但是GUI太遲鈍了,所以我切換到簡單的邊框,這使它更快了。

通過連接Manipulation事件,我仍然設法獲得邊框及其內容的拖動行為(至少在GUI方面)。 但是,當我嘗試將一個正方形(邊界)拖動到另一個正方形時,似乎無法觸發放置事件。 我需要知道目標正方形是哪個。

我了解到,由於我自己正在執行拖放功能,因此我需要做一些事情來掛接邊框的放置事件,但是那又是什么呢?

我還嘗試訂閱邊框事件PointerEntered,PointerMoved等,以找出指針在哪個正方形上以及何時釋放按鈕,我會知道目標正方形。 盡管這似乎僅在兩個方向上起作用(向右和向下),但是當向左或向上移動時,Pointer事件似乎沒有觸發,這很奇怪。 我讀過某處的內容(正方形)具有不同的ZIndex,這可能會影響事件的觸發。

我已經為此奮斗了幾個小時,非常感謝您的幫助。

創建一個附加屬性,並將其連接到Border外部的父控件,將本機拖放到ItemTemplate的TargetType。

將其連接到PreviewMouseUp和PreviewMouseDown事件。

有關更多信息,請參見WPF拖放教程。

您只需要在要拖放的對象之上包括一個Thumb對象。 Thumb對象將觸發必需的事件,並且您可以處理這些事件中想要的任何行為(例如,您可能希望在畫布上移動基礎對象以模擬拖動基礎對象)。

您可以查看Thumb的MSDN頁面以開始使用。

然后,當您收到Thumb通知時,將以適合您的任何方式保留基礎,然后調用Canvas.SetLeft/Top (object, my new coordinates) 通常,您的新坐標將類似於Canvas.GetLeft/Top(object) + args.Horizontal/VerticalChange

如您所知,您必須使用CanvasCanvas放置對象,而不是使用GridListView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM