WPF编译报错No overload for 'FileDropStackPanel_Drop'匹配DragEventHandler委托失败如何解决
错误根源
DragEventHandler 委托的签名要求对应的事件处理方法只能包含2个参数:object sender 和 DragEventArgs e,你当前的 FileDropStackPanel_Drop 方法额外加了BackupFileManager manager、Backup backup两个参数,和委托签名不匹配,所以编译报错。
你不能修改系统DragEventHandler的委托签名,只需要调整你自己的代码结构即可。
修复方案
- 第一步:把你在构造函数中声明的
backup和manager从局部变量提升为MainWindow的类级字段,这样事件方法里可以直接访问,不需要作为参数传递。 - 第二步:删除
FileDropStackPanel_Drop方法后两个多余的参数,方法内部直接调用类级字段即可。
修改后的完整代码示例
// 提升为类级字段 private Backup _backup; private BackupFileManager _manager; public MainWindow() { InitializeComponent(); _backup = new Backup(); _manager = new BackupFileManager(_backup); } // 修正签名,和DragEventHandler匹配 private void FileDropStackPanel_Drop(object sender, DragEventArgs e) { SetValuesOfBackup(e, _manager, _backup); IsFileZip(_manager, _backup); } private void IsFileZip(BackupFileManager manager, Backup backup) { if (backup.FileExtentsion == ".zip") { ZipFile.ExtractToDirectory(backup.FilePath, @"xyz"); } } private void SetValuesOfBackup(DragEventArgs e, BackupFileManager manager, Backup backup) { //the filepath must be set first manager.SetFilePathOfBackup(e); manager.SetDictionaryOfBackup(); manager.SetExtensionOfBackup(); manager.SetNameOfBackup(); }
补充注意事项
要确保你XAML中对应的StackPanel已经开启了拖放功能,属性设置如下:
<StackPanel x:Name="FileDropStackPanel" Drop="FileDropStackPanel_Drop" AllowDrop="True"/>
如果没开AllowDrop属性,就算编译通过拖放事件也不会触发。
内容的提问来源于stack exchange,提问作者user15339638
相关产品推荐
相关产品推荐

