如何允许从 Windows 资源管理器拖放到 C# WPF 应用程序中?

Posted

技术标签:

【中文标题】如何允许从 Windows 资源管理器拖放到 C# WPF 应用程序中?【英文标题】:How can I allow Drag and Drop from Windows Explorer into a C# WPF application? 【发布时间】:2011-02-22 10:17:55 【问题描述】:

我知道关于这个主题有很多答案,但我仍然无法让它发挥作用。我已经在应用程序的每个级别的每个控件上启用了 AllowDrop,并试图在每个控件上捕获 DragEnter 和 Drop,但无济于事。我可以在应用程序中拖放项目,但任何时候我尝试从 Windows 资源管理器或桌面等中引入一些东西时,它都会给我“否”图标。有什么想法我可能做错了吗?

这是我正在做的一个例子。仍然不显示移动光标,也不会点击 MainWindow_DragEnter 函数。

    namespace WpfApplication1

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    
        public MainWindow()
        
            InitializeComponent();
            this.AllowDrop = true;
            this.DragEnter += new DragEventHandler(MainWindow_DragEnter);
        

        void MainWindow_DragEnter(object sender, DragEventArgs e)
        
            e.Effects = DragDropEffects.Move;
        
    

【问题讨论】:

【参考方案1】:

我相信我已经解决了我的问题。我以管理员身份运行 Visual Studio。当它启动我的应用程序时,它无法识别来自资源管理器的拖动,因为资源管理器在用户模式下运行。希望这个愚蠢的举动可以帮助其他人。

【讨论】:

这不是我的问题,但我发现TextBox, RichTextBox, and FlowDocument 都需要some tweaking 才能启用拖放操作。 我在 Window 7 上以管理员身份运行 VS 并获得“否”标志,当然同样适用于以管理员身份独立运行应用程序。现在要弄清楚如何让拖放功能适用于特权提升的应用程序...***.com/questions/2833709/…【参考方案2】:

AllowDrop 仅激活使用拖放的可能性。 你必须自己处理。

如您所见,具有 AllowDrop 的对象也具有事件 DragEnter、DragOver、DragLeave。 你必须编写你想要在这个时刻发生的事情。 您可以更改光标,接受丢弃的项目等。 但是你必须自己做。例如。寻找 DragEventArgs.Effects。

我刚刚打开了一个新的 WPF 应用程序,选择了窗口,启用了 AllowDrop,添加了事件处理程序 DragEnter 并放在那里:e.Effects = DragDropEffects.Move; 适合我。

【讨论】:

我试过这个,结果是一样的。我在 MainMindow_DragEnter 函数中放置了一个断点,但是当我从资源管理器窗口中拖动某些东西时它永远不会被击中。光标仍然是“否”符号。 谢谢,如果我不在 Visual Studio 中的管理员模式下,您的解决方案会运行良好。 感谢 Seabass__ 我对这个“管理员”问题感到绝望!

以上是关于如何允许从 Windows 资源管理器拖放到 C# WPF 应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章

从 Windows 资源管理器拖放到我的应用程序的文本框

如何将图片从资源管理器拖放到 WPF 控件上?

启用从资源管理器拖放到 Run-As-Administrator 应用程序

将大型虚拟文件从 C# 拖放到 Windows 资源管理器

从 Java Swing 应用程序拖放到 Windows 资源管理器

将文件拖放到 wpf/C# 应用程序时,如何在 Windows 资源管理器中维护文件顺序?