WPF FileDrop事件:只允许特定的文件扩展名

mav*_*air 13 c# wpf events

我有一个WPF控件,我想从我的桌面删除一个特定的文件到这个控件.这不是一个沉重的部分,但我想检查文件扩展名以允许或禁止删除.解决这个问题的最佳方法是什么?

Chr*_*ann 25

我认为这应该有效:

<Grid>
    <ListBox AllowDrop="True" DragOver="lbx1_DragOver" 
                                                      Drop="lbx1_Drop"></ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

假设您只想允许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[];
}
Run Code Online (Sandbox Code Playgroud)

  • 很好,谢谢!我只是添加它以防止当你移动到你正在使用的控件的子项上时闪烁光标的一些副作用,你可以添加:DragEnter ="lbx1_DragOver"以便在DragEnter事件上进行检查以及DragOver. (3认同)