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

18

我知道这个问题已经有很多答案了,但是我仍然无法使它工作。我在应用程序的每个级别上启用了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;
        }
    }
}
2个回答

33

我相信我已经解决了我的问题。我之前以管理员身份运行Visual Studio,当它启动我的应用程序时,无法识别来自资源管理器的拖放操作,因为资源管理器是在用户模式下运行的。希望这个错误能帮助其他有类似问题的人。


1
这不是我的问题,但我发现TextBox、RichTextBox 和 FlowDocument都需要 一些调整才能启用拖放。 - Pakman
我在Windows 7上以管理员身份运行VS,但出现了“否定”标志,当然独立以管理员身份运行应用程序也是如此。现在需要找出如何使拖放功能适用于特权提升的应用程序... https://dev59.com/hnE85IYBdhLWcg3wUB2z - Llyle

13

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

如您所见,具有AllowDrop属性的对象还具有DragEnter、DragOver、DragLeave事件。 您需要编写代码以在这些时刻发生所需操作。 您可以更改光标,接受被拖动的项目等等。 但是您必须自行完成。例如,查找DragEventArgs.Effects。

我刚刚打开了一个新的WPF应用程序,选择窗口,启用了AllowDrop,添加了DragEnter事件处理程序,并在其中添加了以下内容:e.Effects = DragDropEffects.Move; 对我来说运行得很好。


我尝试了这个方法,但结果相同。我在MainMindow_DragEnter函数中设置了断点,但当我从资源管理器窗口拖动东西时,它从未被触发。光标仍然是“禁止”符号。 - Seabass__
5
谢谢,如果我没有在 Visual Studio 的管理员模式下,你的解决方案会很好地运作。 - Seabass__
谢谢Seabass__,我对这个“管理员”问题感到绝望! - germanSharper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接