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

Sea*_*s__ 17 c# wpf drag-and-drop

我知道在这个问题上有很多答案,但我仍然无法让它工作.我已经在应用程序的每个级别的每个控件上启用了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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*s__ 32

我相信我解决了我的问题.我以管理员身份运行Visual Studio.当它启动我的应用程序时,它无法识别Explorer中的拖动,因为Explorer在用户模式下运行.希望这个骨头移动可以帮助其他人.


Mar*_*rks 13

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

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

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

  • 谢谢,如果我在Visual Studio中没有处于管理员模式,那么您的解决方案可以正常工作. (5认同)