[英]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
。
如您所知,您必須使用Canvas
並Canvas
放置對象,而不是使用Grid
或ListView
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.