为啥我的 WPF 应用程序禁用了拖放(即使 AllowDrop 为真)?

Posted

技术标签:

【中文标题】为啥我的 WPF 应用程序禁用了拖放(即使 AllowDrop 为真)?【英文标题】:Why my WPF application has Drag & Drop disabled (even when AllowDrop is true)?为什么我的 WPF 应用程序禁用了拖放(即使 AllowDrop 为真)? 【发布时间】:2013-08-04 10:38:21 【问题描述】:

我的 WPF 应用程序禁止从 Windows 资源管理器中删除文件,显示一个停止符号光标。

我尝试在主窗口和包含控件上将 AllowDrop 属性(UIElement 祖先的属性)设置为 true,但完全没有运气,没有触发拖放事件。

有什么想法或建议可以找到原因吗?

【问题讨论】:

你能提供一些代码来展示你的实现吗? 我无法提供代码,因为它很大(很多自定义 wpf 控件)。我需要一些观点或线索来面对这个问题,从哪里开始寻找解决方案。 您的应用的信任级别是多少? @GarryVass 我的应用程序具有 WPF 桌面应用程序的默认信任级别。它不是用于 Web 部署的 XBAP 应用程序,因此我相信它具有完全的信任。 【参考方案1】:

解决了!

问题是通过 VisualStudio(运行/调试)执行我的应用程序阻止了与 Windows 的拖放机制的互操作。以独立方式运行应用程序可以使其工作,但不能以交互方式调试。

这个答案很有帮助: Visual Studio 2010 WPF Project ran in debug or relase will not allow drag and drop to any control

【讨论】:

至少可以附加到进程,然后打断点。【参考方案2】:

在我的例子中,它在 Windows 10 上以管理员身份运行 Visual Studio。UAC 阻止了拖放。当我在不提升拖放功能的情况下运行 VS 时开始在调试模式下工作。

【讨论】:

stambikk,你帮我节省了几个小时! 这真是奇怪的行为,但你是对的。感谢您找到这个。 这是因为在调试模式下运行您的应用程序的用户与打开 Windows 资源管理器窗口的用户不同。同样的原因,您的应用程序的调试版本不会看到网络驱动器。经过 2 个多小时的 Google 搜索后,我偶然发现了这一点。终于有道理了。【参考方案3】:

据此:http://codeinreview.com/136/enabling-drag-and-drop-over-a-grid-in-wpf/ (我很高兴报告作品!)

您需要做的就是在控件上添加一个背景,该控件必须获得拖放。这将启用命中测试,从而使丢弃功能发挥作用。

注意:背景可以是透明的,你只需要设置它。

【讨论】:

当然,报告的问题发生在有背景的情况下(即,它不是试图达到透明效果的花哨的无背景 UI)。

以上是关于为啥我的 WPF 应用程序禁用了拖放(即使 AllowDrop 为真)?的主要内容,如果未能解决你的问题,请参考以下文章

禁用 WebView 的拖放以支持其超级视图之一

WPF手柄拖放以及左键单击

WPF 桌面应用程序 - 即使 ResizeMode 为 CanMinimize 也无法禁用最大化

WPF拖放自定义类

拖放时滚动(WPF)

为啥 Android Studio 总是在应用设计中显示 ActionBar,即使已禁用?