在WPF中检测Drag'n'Drop文件?

Noi*_*ves 15 c# wpf drag-and-drop .net-3.5

是否有可能让WPF窗口/元素检测从C#.Net 3.5中的Windows资源管理器拖拽文件?我找到了WinForms的解决方案,但没有找到WPF的解决方案.

小智 8

请尝试以下方法:

    private void MessageTextBox_Drop(object sender, DragEventArgs e)
    {
        if (e.Data is DataObject && ((DataObject)e.Data).ContainsFileDropList())
        {
            foreach (string filePath in ((DataObject)e.Data).GetFileDropList())
            {
                // Processing here     
            }
        }
    }


    private void MessageTextBox_PreviewDragEnter(object sender, DragEventArgs e)
    {
        var dropPossible = e.Data != null && ((DataObject)e.Data).ContainsFileDropList();
        if (dropPossible)
        {
            e.Effects = DragDropEffects.Copy;
        }
    }

    private void MessageTextBox_PreviewDragOver(object sender, DragEventArgs e)
    {
        e.Handled = true;
    }
Run Code Online (Sandbox Code Playgroud)


Ed *_*all 6

遗憾的是,TextBox,RichTextBox和FlowDocument查看器始终将拖放事件标记为已处理,这可防止它们冒泡到处理程序.您可以通过强制处理拖放事件(使用UIElement.AddHandler并将processedEventsToo设置为true)并在处理程序中将e.Handled设置为false来恢复这些控件拦截的拖放事件.