2009-04-07 4 views

Répondre

25

Je pense que cela devrait fonctionner:

<Grid> 
    <ListBox AllowDrop="True" DragOver="lbx1_DragOver" 
                 Drop="lbx1_Drop"></ListBox> 
</Grid> 

Supposons que vous souhaitez autoriser uniquement les fichiers C#:

private void lbx1_DragOver(object sender, DragEventArgs e) 
{ 
    bool dropEnabled = true; 
    if (e.Data.GetDataPresent(DataFormats.FileDrop, true)) 
    { 
     string[] filenames = 
         e.Data.GetData(DataFormats.FileDrop, true) as string[]; 

     foreach (string filename in filenames) 
     { 
     if(System.IO.Path.GetExtension(filename).ToUpperInvariant() != ".CS") 
     { 
      dropEnabled = false; 
    break; 
     } 
     } 
    } 
    else 
    { 
     dropEnabled = false; 
    } 

    if (!dropEnabled) 
    { 
     e.Effects = DragDropEffects.None; 
    e.Handled = true; 
    }    
} 


private void lbx1_Drop(object sender, DragEventArgs e) 
{ 
    string[] droppedFilenames = 
         e.Data.GetData(DataFormats.FileDrop, true) as string[]; 
} 
+3

parfait, merci! J'ajouterai simplement que pour éviter certains effets secondaires du curseur clignotant lorsque vous passez sur les enfants du contrôle sur lequel vous allez passer, vous pouvez ajouter ceci: DragEnter = "lbx1_DragOver" pour que la vérification soit faite sur l'événement DragEnter ainsi que sur le DragOver. – David

Questions connexes