2010-10-05 5 views
3

Je souhaite autoriser l'abandon de fichiers image dans mon application: Les utilisateurs peuvent faire glisser des images à partir de Windows et les déposer dans ma fenêtre. J'ai le code suivant mais il semble que ça ne marche pas. J'ai essayé deux FileDrop & Bitmap, à la fois échoueC#/WPF: Faire glisser et déposer des images

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

private void Border_Drop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
    { 
     MessageBox.Show(e.Data.GetData(DataFormats.FileDrop).ToString()); 
    } 
    else 
    { 
     MessageBox.Show("Can only drop images"); 
    } 
} 

Comment puis-je vérifier quels formats l'utilisateur tente de laisser tomber?

Répondre

4

Si l'utilisateur glisse depuis l'explorateur, tout ce que vous obtenez est une liste de noms de fichiers (avec chemin). Une solution simple et fonctionnant principalement serait de regarder les extensions de fichiers et si elles correspondent à une liste prédéfinie d'extensions supportées.

Quelque chose comme ça (non testé, peut même pas compiler, mais nous espérons que vous avez l'idée)

var validExtensions = new [] { ".png", ".jpg", /* etc */ }; 
var lst = (IEnumerable<string>) e.Data.GetData(DataFormats.FileDrop); 
foreach (var ext in lst.Select((f) => System.IO.Path.GetExtension(f))) 
{ 
    if (!validExtensions.Contains(ext)) 
     return false; 
} 
return true;