前言
实现从窗口外部拖文件到窗口内部并自动捕获文件地址。
第一步 开启属性
启用底层Window
的AllowDrop
属性,添加Drop
事件。
Drop
事件:当你拖动文件到对应控件后,松开触发。
除
Drop
事件外,我们还可以使用DragEnter
、DragOver
、DragLeave
三个事件。
第二步 事件代码
private void MainWindow_Drop(object sender, DragEventArgs e){ string msg = "Drop"; if (e.Data.GetDataPresent(DataFormats.FileDrop)) { msg = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString(); } MessageBox.Show(msg);}
实例1:
在WPF中的实现和WinForm中的实现99%相似,将要实现接受拖拽释放的控件添加DragEnter事件和Drop事件,本例中控件Grid grid作为接受控件,添加事件操作如下:
private void grid_Drop(object sender, DragEventArgs e){ string fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString(); //获得文件名后的操作...}private void grid_DragEnter(object sender, DragEventArgs e){ if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effects = DragDropEffects.Link; //WinForm中为e.Effect = DragDropEffects.Link else e.Effects = DragDropEffects.None; //WinFrom中为e.Effect = DragDropEffects.None}
实例2:
////// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); //启用接收 拖放 this.AllowDrop = true; } private void Grid_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effects = DragDropEffects.Link; else { e.Effects = DragDropEffects.None; lblFileName.Foreground = System.Windows.Media.Brushes.Red; lblFileName.Content = "拖入的内容不是文件"; } } private void Grid_Drop(object sender, DragEventArgs e) { System.Array array = e.Data.GetData(DataFormats.FileDrop) as Array; string fileName = array.GetValue(0).ToString(); lblFileName.Content = fileName; //获取图片 System.Drawing.Bitmap bit = new Bitmap(fileName); //获取图片的格式 lblPixedFormat.Content = bit.PixelFormat; //显示图片 IntPtr hBitmap = bit.GetHbitmap(); ImageSource imgS = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions() ); imgOne.Source = imgS; } }
显示结果:
更多参考: