2016-06-15 45 views
0

ドラッグを実装するListBoxを持っています&ドロップ:アイテムを1つ選択してアイテムを選択し、別のアイテムの上にドラッグすると正しい位置に配置されます。複数の項目を選択する(シフトまたはCtrlキーを使用して)私はそれを動作させることができませんでした。WPF - ListBox内で複数のアイテムをドラッグアンドドロップする

私の主な問題は、DragDrop.DoDragDrop関数がどのように項目のバッチを処理するかわかりません。これは、単一項目(FrameworkElement、データ形式とデータ、最後にドラッグエフェクトを指定します)で機能します。しかし、複数のアイテムがある場合、どうすればDoDragDropを使用できますか?私はフォーマットを指定しなければならないので、常にそのフォーマットの単一のインスタンスを期待していませんか?ドラッグ&ドロップしたい複数の「エンティティ」を持っていますが、DragDrop.DoDragDropにすべてのデータを1回の操作で受け入れるように指示するにはどうすればよいですか?

DoDragDropメソッドに1つだけDataObjectを渡しているときは完全に機能しますが、1回の呼び出しで複数のオブジェクトを渡す方法を見つける必要があります。

これまでのところ、複数のDataObjectを作成しようとしましたが、データとしてDoDragDropに追加する配列またはリストを作成しようとしましたが、うまくいきません。私もループDoDragDropを試してみました。私はドラッグしているすべてのアイテムに対して一度呼び出されてしまい、それもうまくいきませんでした。

答えて

0

私はこの問題を解決できました。データの場合、ドラッグする必要があるオブジェクトのリストを渡しました。ドロップを処理するときには、リストとしてデータを受け取り、その後、必要な処理を行います。

問題は、ただ一つのデータオブジェクトに属さない "フォーマット"という概念を頭で囲むことができないということでした。フォーマットのために私は単に

DragDrop.DoDragDrop((FrameworkElement)sender, new DataObject("System.Collections.Generic.List<object>", _dragSources.Select(x => x.DataContext).ToList()), DragDropEffects.Copy);

を入れて、すべてが働きました。 MSDNのドキュメントでさえ、 "フォーマット"の部分は実際にはキーにすぎないと言われています。文字通り何でも置くことができ、データを取得するために使用しているもの(この場合はe.Data.GetData("System.Collections.Generic.List<object>") as List<object>;)と一致する限り、あなたは金色です。

関連する問題