DoDragDrop() - droptarget是另一个应用程序(word或excel)



在我的WPF应用程序中,我已经实现了拖放,并将PNG图像放在DataObject中,然后将其传递给DoDragDrop方法。至于我可以使用哪些应用程序,似乎是断断续续的。excel可以,Word不行。

我在这里看看是否有一种方法来检查目标应用程序(MS Word)是否会接受被拖到它的对象。目前图像看起来像是被拖拽的,但是Word对它没有任何处理。当从Excel拖动到Word时,我得到一个红色图标,表示拖动不起作用,如果我的拖动不起作用(如果可能的话),我需要显示相同的图标。

我所有的文章似乎都表明,DropTarget实现了拖过和反馈事件,而不是我的应用程序作为拖源?这是正确的还是我可以使用这些事件来检查DropTarget?

奇怪的是,Word不接受我的图像,但Excel可以。有没有其他更稳健的拖放方式?

谢谢你的帮助。

Excel中的拖放功能看起来非常糟糕,至少在我的版本(2013)中是这样。例如,它不会接受从资源管理器中拖动的文件,否则会在错误的位置产生大量的绘画工件和掉落。但是真正起作用的是拖动位图对象。

要使其同时适用于Excel和Word,您需要指定多个格式。这段Winforms测试代码运行良好,使用了图片文件夹中名为"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);
        }
    }

最新更新