Bonjour,
en prenant des idées sur différents sites, j'ai réalisé une façon de faire qui fonctionne sous Windows 10, en passant par un fichier temporaire mais je crois que c'est encore la solution la plus simple.
Alors dans le XAML, pour ma ListView, je rajoute deux événements sur l'appuie du bouton droit et le mouvement de la souris:
<ListView x:Name="ligneFichier" DockPanel.Dock="Top" Margin="-10,65,10,0" AllowDrop="true" Drop="ligneFichier_Drop" MouseLeftButtonDown="ligneFichier_MouseLeftButtonDown" MouseMove="ligneFichier_MouseMove" RenderTransformOrigin="0.568,0.479">
Je rajoute dans le code source:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| private Point start;
private void ligneFichier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.start = e.GetPosition(null);
}
private void ligneFichier_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed) // Sinon cela deconne car ma ListView a aussi un evenement DROP dessus (on peux y déposer des fichiers)
{
ListView parent = (ListView)sender;
object data = parent.SelectedItems;
System.Collections.IList items = (System.Collections.IList)data;
var collection = items.Cast<Ligne>();
if (data != null)
{
List<string> filePaths = new List<string>();
foreach (Ligne l in collection)
{
filePaths.Add(new System.IO.FileInfo(l.nomFichierTemporaire).FullName);
}
DataObject obj = new DataObject();
System.Collections.Specialized.StringCollection sc = new System.Collections.Specialized.StringCollection();
sc.AddRange(filePaths.ToArray());
if (sc.Count > 0) // Sinon exception a la ligne obj.SetFileDropList(sc); qui n'accepte pas de liste vide
{
obj.SetFileDropList(sc);
DragDrop.DoDragDrop(parent, obj, DragDropEffects.Copy);
}
}
}
} |
Le nomFichierTemporaire est pour l'instant renseigné à la main (c'est un programme que de commence)
1 2 3 4 5
| List<Ligne> items = new List<Ligne>();
items.Add(new Ligne() { nomReelFichier = "NOM_REEL", nomFichier = "NOM_FICHIER", dateFichier = "12/10/2017", versionFichier = "0.1", nomFichierTemporaire = @"G:\CUISINE.JPG" });
items.Add(new Ligne() { nomReelFichier = "NOM_REEL2", nomFichier = "NOM_FICHIER2", dateFichier = "12/10/2017", versionFichier = "0.1", nomFichierTemporaire = @"G:\CUISINE2.JPG" });
items.Add(new Ligne() { nomReelFichier = "NOM_REEL3", nomFichier = "NOM_FICHIER3", dateFichier = "12/10/2017", versionFichier = "0.1", nomFichierTemporaire = @"G:\CUISINE3.JPG" });
ligneFichier.ItemsSource = items; |
Voila, il ne me reste plus qu'a créer le fichier temporaire après le "drop", je ne sais pas trop encore comment faire, peut-être peut-on surveiller ce fichier temporaire pour le créer d'abord vide sur le bureau puis ensuite le remplir...
Bonne journée !
Partager