【问题标题】:WPF Drag and Drop DragDropEffects changing when moving off of WPF Window移出 WPF 窗口时 WPF 拖放 DragDropEffects 发生变化
【发布时间】:2019-06-06 03:04:55
【问题描述】:

我有一个 WPF 应用程序,我在其中拖动一个文件对象。它可以拖放到应用程序内部的多个窗口中,也可以从外部拖放到资源管理器中,然后放到桌面和其他一些地方。

拖放操作工作正常,但 DragDropEffect 仅在应用程序窗口内正确显示。当光标移出应用程序窗口时,我会看到“verboten”图标 - 大多数情况下。根据光标在大多数情况下离开应用程序的方式,我得到了斜线圆圈。但有时它会正确地继续拖动复制图标。

var files = new[] {editor.MarkdownDocument.Filename} ;
var dragData = new DataObject(DataFormats.FileDrop,files);

DragDrop.DoDragDrop(tab, dragData, DragDropEffects.Copy);

如前所述,shell 的代码和处理工作正常 - 文件被复制,问题只是拖动图标。

我可以控制应用程序内部的拖动图标,在窗口上没有问题,但我无法控制在它之外发生的事情。

那么如何在 WPF 外部可靠地控制拖动图标?

【问题讨论】:

  • 会不会和UAC有关?不同 UAC 级别的两个应用程序无法通话。因此,如果您以管理员身份运行 WPF 应用程序,并且您的资源管理器受到限制(默认),D&D 将无法工作。
  • 在这种情况下不是 - 一切都在用户模式下运行。我注意到,尽管 Windows 在某些情况下无法正确显示拖动图标,但在 everywhere 中拖放会做一些奇怪的事情。不太一样。重新启动,现在看到更多不同奇怪的东西。现在想知道 Windows 本身是否存在导致这一切的问题。
  • 也许某些第 3 方软件在 Shell 中玩得很奇怪?我会检查将哪些 .dll 加载到 explorer.exe 中(例如使用 sysinternals 的 procexp 或 autoruns 工具)

标签: c# wpf drag-and-drop


【解决方案1】:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.dragdrop.givefeedback

DragDrop.GiveFeedback += SetTheCursorHere;

您应该(根据 Microsoft 的文档)缓存光标等,因为在拖动时会一遍又一遍地调用它,并且您不希望在拖动时加载资源。

【讨论】:

  • 我看过这个,看起来 GiveFeedback 是唯一在 WPF 窗口之外触发的偶数。但是,虽然我可以设置 Mouse Cursor,但我无法更改 Drag Cursor(e.Effects 是只读的)。当我设置UseDefaultCursors = false 然后分配一个明确的鼠标光标时,我得到了重叠的双光标,它们像疯了一样闪烁(至少需要节流)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多