2017-08-01 60 views
0

所以我在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

回答

0

的問題是,文本框有它自己的拖放不支持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