如何正确允许在WPF中拖放?

问题描述:

所以我在WinForm大约一年之前就开始使用这个应用程序,并决定在WPF中重新创建它,以使它更多..最新我猜。 我刚刚遇到了我的第一个问题,允许拖放。 当我尝试拖放一个文件时,它不会工作,因为它给了我一个带有一条线的黑色圆圈。如何正确允许在WPF中拖放?

这是我到目前为止尝试过的。 设置AllowDrop = true。

测试测试在堆栈

几个解决方案,这其中 http://codeinreview.com/136/enabling-drag-and-drop-over-a-grid-in-wpf/

但我谷歌我无法多少找到答案,所以我要问的利弊。 把它放在我身上我做错了什么,我将如何以正确的方式做到这一点? 这是我到目前为止的代码

<Grid AllowDrop="True" Drop="Grid_Drop" DragOver="Grid_DragOver"> 
    <TextBox Name="tbSomething" Text="stuff" Margin="181,140,183,152"></TextBox> 
</Grid> 

    private void Grid_Drop(object sender, DragEventArgs e) 
    { 
     if (null != e.Data && e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      var data = e.Data.GetData(DataFormats.FileDrop) as string[]; 
      // handle the files here! 
     } 
    } 

    private void Grid_DragOver(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      e.Effects = DragDropEffects.Copy; 
     } 
     else 
     { 
      e.Effects = DragDropEffects.None; 
     } 
    } 
+0

...你尝试设置_breakpoint_吗? – MickyD

的问题是,文本框有它自己的拖放不支持FileDrop,这就是为什么你会得到Drag.None图标处理程序。

所以你需要把你的处理程序放在TextBox处理程序的前面。像这样...

<Grid> 
     <TextBox Name="tbSomething" Text="stuff" Margin="20" AllowDrop="True" PreviewDrop="Grid_Drop" PreviewDragOver="Grid_DragOver" ></TextBox> 
    </Grid> 

预览处理程序在文本框处理程序之前被调用。

然后在处理程序...

private void Grid_Drop(object sender, DragEventArgs e) 
    { 
     if (null != e.Data && e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      var data = e.Data.GetData(DataFormats.FileDrop) as string[]; 
      e.Handled = true; 
      // handle the files here! 
     } 
    } 

    private void Grid_DragOver(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      e.Effects = DragDropEffects.Copy; 
      e.Handled = true; 
     } 
     else 
     { 
      e.Effects = DragDropEffects.None; 
     } 
    } 

注意e.Handled = true的语句!如果没有这些文本框处理程序将简单地覆盖您的工作。

+0

我确定这在大部分情况下都能正常工作,但我仍然得到这个圈子。 –

+0

看看XAML。我将处理程序从网格移至文本框。它适用于你的情况。我用你的代码! – AQuirky