Rileva il file Drag’n’Drop in WPF?

È ansible che una finestra / elemento WPF rilevi il drag’n’dropping di un file da Windows Explorer in C # .Net 3.5? Ho trovato soluzioni per WinForms, ma nessuna per WPF.

Sfortunatamente, i visualizzatori TextBox, RichTextBox e FlowDocument contrassegnano sempre gli eventi di trascinamento della selezione come gestiti, il che impedisce loro di ribellarsi ai gestori. È ansible ripristinare gli eventi di trascinamento della selezione intercettati da questi controlli gestendo con la forza gli eventi di trascinamento della selezione (utilizzare UIElement.AddHandler e impostare handledEventsToo su true) e impostare e.Handled su false nel gestore.

Prova quanto segue:

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; } 

Ho scoperto che non potevo lasciarmi cadere sul mio TextBox per qualche motivo, ma il passaggio ai pulsanti funziona correttamente. Ho funzionato aggiungendo “AllowDrop =” True “” alla mia finestra e aggiungendo il gestore di eventi drop al pulsante composto da:

 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 } } } 

Ho notato che il drag & drop in WPF non è così semplice come potrebbe essere. Così ho scritto un breve articolo su questo argomento: http://www.wpftutorial.net/DragAndDrop.html

Ho avuto problemi simili, gli eventi di rilascio e trascinamento degli eventi di invio non sono stati triggersti. Il problema era con le impostazioni dell’account utente di Windows. Impostalo su impostazioni meno sicure e prova lo stesso codice in cui funziona.