2009-04-07 9 views

Odpowiedz

25

myślę, że to powinno działać:

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

Załóżmy chcesz zezwolić tylko C# pliki:

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

doskonały, dzięki! Dodam tylko, że aby zapobiec niektórym efektom ubocznym migania kursora, gdy poruszasz się nad dziećmi kontrolki, na którą wkraczasz, możesz dodać: DragEnter = "lbx1_DragOver", aby dokonać sprawdzenia na zdarzeniu DragEnter jak również na DragOver. – David

Powiązane problemy