【发布时间】: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