3

私のWPFアプリケーションでは、ドラッグドロップを実装し、PNG画像をDataObjectに配置してから、それをDoDragDropメソッドに渡しています。どのアプリケーションをドロップできるかについては、かなり行き当たりばったりのようです。はい、いいえ、いいえ。

ターゲット アプリケーション (MS Word) がドラッグされたオブジェクトを受け入れるかどうかを確認する方法があるかどうかを確認するためにここにいます。現在、画像はドラッグされているように見えますが、Word は何もしません。Excel から Word にドラッグすると、ドラッグが機能しないことを示す赤いアイコンが表示されます。ドラッグが機能しない場合 (可能であれば)、同じアイコンを表示する必要があります。

私が持っているすべての記事は、DragSource としての私のアプリではなく、DropTarget が DragOver および Feedback イベントを実装していることを示しているようです? これは正しいですか、またはこれらのイベントを使用して DropTarget を確認できますか?

Word が私の画像を受け入れず、Excel が受け入れるというのは奇妙です。より堅牢なドラッグドロップする他の方法はありますか?

ご協力ありがとうございます。

4

1 に答える 1

3

Excel でのドラッグ アンド ドロップは、少なくとも私の版 (2013 年) では、著しく壊れているように見えます。たとえば、エクスプローラーからドラッグされたファイルを受け入れません。そうしないと、非常に多くのペインティング アーティファクトが生成され、間違った場所にドロップされます。しかし、ビットマップ オブジェクトをドラッグすることは機能します。

Excel と Word の両方で機能させるには、複数の形式を指定する必要があります。この Winforms テスト コードのビットは、Pictures フォルダーにある「transparent.png」という名前のサンプル イメージを使用して、うまく動作しました。必要に応じて微調整して、独自の画像ファイルを WPF にドラッグします。

    private void Form1_MouseDown(object sender, MouseEventArgs e) {
        string path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
        path = System.IO.Path.Combine(path, "transparent.png");
        using (var bmp = new Bitmap(path)) {
            var data = new DataObject();
            var files = new System.Collections.Specialized.StringCollection();
            files.Add(path);
            data.SetFileDropList(files);   // This format works in Word
            data.SetImage(bmp);            // This format works in Excel
            DoDragDrop(data, DragDropEffects.Copy);
        }
    }
于 2013-01-18T13:39:44.473 に答える