2012-04-16 15 views
2

私は、四角形のItemsControlで構成されるユーザコントロールを持っているアプリケーションを持っています。 チェス盤のように考えてください。ItemsControlをメトロでドラッグ&ドロップする(C#/ XAML)

私のItemTemplateはボーダーで構成されているため、GridViewまたはListViewのようにドラッグ&ドロップのネイティブサポートがありません。私はGridViewとListViewの両方を私の四角形の前に使ってみましたが、GUIがあまりにも低速になりましたので、私はそれをもっと速くする簡単な境界に切り替えました。

操作イベントに接続することで、私の境界線とその内容(少なくともGUIに関しては)のドラッグ動作が得られました。 しかし、正方形(境界線)を別の四角形にドラッグしようとすると、ドロップイベントが発生するようには見えません。私は目標の広場がどれであるか知る必要があります。

私は自分のドラッグをしているので、私は理解しています&私はボーダーのドロップイベントにフックするために何かをする必要がありますか?

ボーダーイベントPointerEntered、PointerMovedなどを購読しようとしましたが、ポインターがどの四角形で終わっているかを知ることができました。ボタンが離されると、ターゲットの四角形がわかります。これは2つの方向(右と下)でしか動作しないように見えますが、Pointerイベントは左または上に移動したときには起きないようです。アイテム(四角形)に異なるZIndexがあり、これがイベントの発生に影響する可能性があると私は読んでいます。

私はこれで何時間も苦労し、本当に助けに感謝します。

+0

DragEnter/DragOver/DragLeaveイベントとDropイベントを調べましたか? –

答えて

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を使用し、GridまたはListViewの代わりに自分でオブジェクトを配置する必要があります。

関連する問題