处理外部程序的 wpf drop

Posted

技术标签:

【中文标题】处理外部程序的 wpf drop【英文标题】:Handling wpf drop of external programs 【发布时间】:2020-06-10 13:15:28 【问题描述】:

我正在尝试提出一个想法,其中一个重要概念是删除程序、书签等。我有我认为的要点,但我没有收到任何信息

private void Border_Drop(object sender, DragEventArgs e)
            
    FileInfo[] files = (FileInfo[])e.Data.GetData(DataFormats.FileDrop);

    foreach (FileInfo file in files)
    
        Writer.Text += file.FullName;
    

虽然我的文本块从未填充过?我想获取File 的所有属性,例如 FullNameNameExtensionDirectoryName等。

关于从这里去哪里的任何指示?我一直在尝试阅读该事件的 MSDN,但没有任何内容出现,并且我搜索了 ***,但没有任何内容适用于我的案例。

【问题讨论】:

当你说什么都没用。您采用***.com/questions/5662509/… 之类的代码遵循建议并尝试放入某种面板?或者这里的代码带有循环用户控件docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/… 事件处理程序是否被调用? 我正在放置一个边框元素并将该信息发布到一个文本块中,以便我可以阅读它 【参考方案1】:

一个可能的原因是您将事件处理程序附加到了错误的控件。尝试将事件处理程序附加到表单,或者如果这不起作用,则附加到文本块。

我还强烈建议您进行一些调试。 Place a breakpoint 在事件处理程序中查看它是否被调用,如果是,它会发生什么。

【讨论】:

谢谢,我会添加断点,我总是忘记他们先是前端 Web 开发人员,然后是后端,现在是软件【参考方案2】:

WPF 有两种不同的路由事件处理机制:冒泡和隧道。冒泡是执行此操作的“正常”方式,而隧道是当您在事件名称中看到所有这些 PreviewThis 和 PreviewThat 时。有可能另一个控件已将事件标记为已处理,因此您在事件处理程序中看不到它。

如果您需要有关 WPF 拖放的文档,请阅读 this

如果你需要一些关于这个主题的真正定制的、非常低级的东西,你也可以阅读Object Linking and Embedding 这可能是在 Word 中实现拖放的方式,以便你可以将图像和 Excel 表格拖入Word 文档,它们将本机显示。但是要使用它,您可能需要使用一些 Win32 API 调用,这有点令人讨厌。

【讨论】:

感谢您的建议,我去看看

以上是关于处理外部程序的 wpf drop的主要内容,如果未能解决你的问题,请参考以下文章

WPF 程序中启动和关闭外部.exe程序

从外部文件或程序集加载 WPF 样式或其他静态资源

如何在 WPF 应用程序中包含外部字体而不安装它

如果打开一个对话框,则始终启用WPF拖放

从 WinForms 拖放到 WPF 问题

从外部应用程序隐藏或删除按钮