C# 模拟将文件拖放到WPF窗口中

C# 模拟将文件拖放到WPF窗口中,c#,wpf,drag-and-drop,C#,Wpf,Drag And Drop,在我的应用程序中,我支持拖放,当用户执行此操作时,代码的这一部分工作正常 现在,我想让人们能够创建用于测试和调试等的自定义脚本。因此,我需要一种方法来模拟将文件从windows文件拖到我的应用程序中的效果 我已创建一个命令: MCommandsManager.CreateEventSimulationCommand<string[]>(this, "Shell", "DragAndDrop", (o) => DragAndDropHandler(o)); 这调用了我的函数:

在我的应用程序中,我支持拖放,当用户执行此操作时,代码的这一部分工作正常

现在,我想让人们能够创建用于测试和调试等的自定义脚本。因此,我需要一种方法来模拟将文件从windows文件拖到我的应用程序中的效果

我已创建一个命令:

MCommandsManager.CreateEventSimulationCommand<string[]>(this, "Shell", "DragAndDrop", (o) => DragAndDropHandler(o)); 
这调用了我的函数:

     private object DragAndDropHandler(string[] o)
     {
     string filePath = o[0];
     if (File.Exists(filePath))
        {
        var data = new DataObject(DataFormats.FileDrop, o);
        DragDrop.DoDragDrop(this, data, DragDropEffects.Move | DragDropEffects.Copy);
        }
     return false;
     }
奇怪的是,当我执行这个时,我想要的临时文件会在我的VS中打开。。。而不是在我的应用程序中


有没有其他API我应该看看。DragDrop似乎没有我所需要的功能。

你试过利用UIA吗?从没听说过,我想我还有一些功课要做。所有标准windows控件中内置的可访问性API可以满足很多需求:顶级GUI测试。不过,渐变有时会有点棘手,所以它不是一个普遍适用的搭配。您需要调查UIA和MSAA:
     private object DragAndDropHandler(string[] o)
     {
     string filePath = o[0];
     if (File.Exists(filePath))
        {
        var data = new DataObject(DataFormats.FileDrop, o);
        DragDrop.DoDragDrop(this, data, DragDropEffects.Move | DragDropEffects.Copy);
        }
     return false;
     }