【问题标题】:WPF Drag & Drop to External Application (Outlook)WPF 拖放到外部应用程序 (Outlook)
【发布时间】:2020-03-05 16:50:15
【问题描述】:

我正在尝试为我的 WPF 应用程序实现一些额外的拖放功能。当源和目标在我的应用程序中时,我可以进行拖放操作,但是 我需要能够将数据从我的应用程序拖到 Outlook(桌面应用程序)并在拖放时将其作为文件上传强>.

我熟悉标准的 DragDrop.DoDragDrop() 方法,以及与典型拖放相关的事件。

当前标记:

MouseLeftButtonDown="Data_MouseLeftButtonDown"

当前事件处理程序代码:

/// Getting the data that we want to export (For example only)
private void Data_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    // Write data to a file (For example only)
    var fileToExport = File.ReadAllLines("C:\\test.txt");

    if (e.OriginalSource is Grid grid && grid.DataContext is CustomDataObject cdo)
    {
        DragDrop.DoDragDrop(ControlGoesHere, fileToExport, DragDropEffects.Copy);
    }
}

我已经尝试了大部分(如果不是全部)我研究过的其他 SO 解决方案,但我仍然无法将这些数据放入 Outlook。此外,我禁用了“只是我的代码”并启用了所有 CLR 异常并看到此异常被抛出:

System.Runtime.InteropServices.COMException: 'Invalid FORMATETC structure (Exception from HRESULT: 0x80040064 (DV_E_FORMATETC))'

据我了解,DoDragDrop 会根据您传入的数据构造一个 DataObject,并且您可以在传入 DataObject 之前手动实例化它以进行更多控制等,但到目前为止我还没有进行任何配置。

有些事情我不确定

  • “导出”的数据是否需要来自源代码管理? (我成功地将字符串“Test”导出到不是来自控件的 Outlook。
  • 为了让DoDragDrop 返回某些东西,我必须按 ctrl 或其他键,这是因为我当前的实现设置没有正确处理 drop 逻辑(例如,使用 QueryContinueDrag

WPF、.NET Framework 4.6.1

我可以根据需要提供更多信息,请告诉我。 提前致谢!

【问题讨论】:

    标签: c# wpf drag-and-drop export


    【解决方案1】:

    Outlook 需要知道它正在接收什么。为此,您创建一个 DataObject 并为其指定 FileDrop 格式类型。 FileDrop 需要一个 string[] 作为对象值,因此如果您有多个文件,请使用 string[] 输入您的文件 PATH 或路径。不要尝试阅读整个文件。

    string[] files = new string[1];
    files[0] = ""; //fill this in with the file PATH
    DataObject data = new DataObject(DataFormats.FileDrop, files);
    DragDrop.DoDragDrop(listTest, data, DragDropEffects.Copy);
    

    有了这个,我可以将一个项目拖到 Outlook 电子邮件的消息区域,并让它附上我输入的路径的文件。

    【讨论】:

    • 感谢您的信息!我正在做一些非常接近此的事情,但实际上是将文件的内容作为字符串 [] 传递。然而,我设法得到了一个不同的实现,尽管它比你在这里提出的要复杂得多。对于我目前的要求,有一个警告是,我必须在拖放期间/之后写入需要传递到文件的数据,因为数据尚未存储在单个文件中。目前的设计需要大量开销才能以这种方式导出少量数据,所以我会研究一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2010-09-23
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多