c# - 在 WPF 数据网格中复制到剪贴板失败 (CLIPBRD_E_CANT_OPEN)

标签 c# wpf wpfdatagrid

我在从 WPF 数据网格复制单元格时遇到问题。我在同一个应用程序中还有一些其他文本编辑器窗口(如 Avalonedit),我可以从那里复制到剪贴板,但不能从数据网格复制。每当我尝试复制一个单元格时,我都会收到消息“打开剪贴板失败(HRESULT 异常:0x800401D0)”。

所以我可以复制粘贴除数据网格以外的所有内容。我尝试了 OpenClipboard 和 CloseClipboard 方法,但这似乎也不适合我。

我看过这里提到的方法。 ( http://blog.somewhatabstract.com/2012/06/27/when-the-clipboard-says-no/ ) 但我无法找出如何覆盖方法 OnExecutingCopy 除非我从 DataGrid 派生并做一些事情。

最佳答案

@ssarangi

你好 ssarangi...我不知道你是否解决过这个剪贴板问题,但我在尝试找到解决我的一些用户间歇性遇到的剪贴板争用问题的方法时遇到了你的问题。我正在做的是双管齐下的方法:

  1. 切换到使用 System.Windows.Forms.Clipboard.SetDataObject("string", false, retryTimes, retryDelay)
  2. 添加逻辑以查找与我有争用的应用。

我回答了另一个类似的问题,其中包含了代码片段,因此如果您仍在寻求帮助,可以查看它是否有帮助:OpenClipboard Failed when copy pasting data from wpf DataGrid

本质上,我为 GetOpenClipboardWindow()GetWindowThreadProcessId() 使用了两个 DllImport,然后我得到了所有事件的 Process 通过 Process.GetProcesses() 对象并遍历它们以查找来自 GetOpenClipboardWindow() 的窗口句柄上的匹配项或 上的匹配项>Process.Id(PID)我通过 GetWindowThreadProcessId() 获得。这不是解决方案,但它可能有助于确定将您锁定在剪贴板之外的原因。

我正在做的另一件事可能有帮助是切换到 System.Windows.Forms Clipboard 类,该类具有 的内置重试循环设置数据对象()

关于c# - 在 WPF 数据网格中复制到剪贴板失败 (CLIPBRD_E_CANT_OPEN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19286465/

相关文章:

c# - Wpf DataTemplate绘制多条线

wpf - 字符串格式的问题

wpf - DataGrid WPF 虚拟化和命令 CanExecute

c# - header 上方的 WPF 数据网格 header

mvvm - View 中的 MouseDoubleClick 事件

c# - 未使用 IdentityServer3 持有者 token 调用 WebAPI 授权属性

c# - Controller 中的 Url.Action 两次生成端口

c# - 在 IE6/7 中使用 IHTMLElement5/6(适用于 IE8/9)会发生什么?它会转向 IHTMLElement 行为吗?

c# - 通过 POSTMAN 发送时 HttpRequest.Files 为空

c# - 为什么我的 window 没有收集垃圾?