在我的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);
}
}