15

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

4

4 回答 4

9

尝试以下操作:

    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;
    }
于 2011-04-22T12:14:55.723 回答
6

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

于 2008-12-03T05:14:57.063 回答
3

事实证明,由于某种原因,我无法放到我的 TextBox 上,但放到按钮上效果很好。通过将'AllowDrop="True"'添加到我的窗口并将放置事件处理程序添加到按钮来使其工作,其中包括:

private void btnFindType_Drop(object sender, DragEventArgs e)
{
  if (e.Data is System.Windows.DataObject &&
    ((System.Windows.DataObject)e.Data).ContainsFileDropList())
  {
    foreach (string filePath in ((System.Windows.DataObject)e.Data).GetFileDropList())
    {
      // Processing here
    }
  }            
}
于 2008-12-02T03:02:18.297 回答
0

我有类似的问题,放置事件和拖动输入事件没有被触发。问题出在 Windows 用户帐户设置上。将其设置为最不安全的设置并尝试使用相同的代码。

于 2012-03-22T08:34:45.293 回答