2010-06-14 20 views
27

Siguiendo mi ejemplo.Arrastrar y soltar en Desktop/Explorer

Recibí una aplicación que carga una estructura de archivos (carpetas, archivos) desde una base de datos a un WPF ListView. Ahora me gustaría tomar un archivo de este ListView, arrastrarlo sobre mi Escritorio (o alguna ventana abierta del explorador) y soltarlo allí. Arrastrar y soltar básico, nada sofisticado. Esto suena como una función "estándar" para una aplicación de Windows, pero Google no lo ayudará.

Entonces, ¿cómo puedo lograr esto? Interops?

Gracias

Editar: Gracias por la solución, todavía tenían que hacer algunas google. Here's my complete solution.

+1

se agradecería si publicara su solución completa como respuesta aquí. –

+0

Probé tu ejemplo pero no se compilará, DragDrop es desconocido. ¿Debo agregar una referencia o algo? – GuidoG

Respuesta

27

DragDrop.DoDragDrop puede hacer esto siempre que lo pase un DataObject apropiado.

Primero copie los archivos en alguna parte. Puede usar System.IO.Path.GetTempPath() si no tiene un lugar mejor.

A continuación, cree una matriz de cadenas que contiene las rutas completas a los archivos y haga lo siguiente:

string[] paths = ...; 
DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, paths), 
        DragDropEffects.Copy); 

En realidad, es posible hacer esto sin pre-copiar los archivos, sino que se mete en algunas interacciones IDataObject complicados, entonces, a menos que tus archivos sean potencialmente muy grandes y no estén ya en el sistema de archivos, probaría este método primero.

+0

Gracias, lo probaré de inmediato. –

+0

Trabajado, gracias. –

+3

Sé que este es un hilo muy antiguo, pero ¿podría ampliar su afirmación sobre "a menos que sus archivos sean potencialmente muy grandes" -parte? Estoy tratando de hacer exactamente eso. Tener una funcionalidad DragDrop, que descarga el archivo cuando lo dejas caer en algún lugar. – Falgantil