我正在使用我创建的自定义附加事件,并且我正在尝试为此事件添加处理程序
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void dataGridTasks_Drop(object sender, RoutedEventArgs e)
{
}
}
这里是XAML代码
<ListView util:DragDropHelper.Drop="dataGridTasks_Drop">
我在InitializeComponent
中的运行时出现此错误'System.String'类型的对象不能 转换为类型 'System.Windows.RoutedEventHandler'。
任何人都知道我为什么会收到这个错误? 谢谢!
这是我的活动代码
public static readonly RoutedEvent DropEvent = EventManager.RegisterRoutedEvent(
"Drop", RoutingStrategy.Bubble, typeof(DropEventArgs), typeof(DragDropHelper));
public static void AddDropHandler(DependencyObject d, RoutedEventHandler handler)
{
UIElement uie = d as UIElement;
if (uie != null)
{
uie.AddHandler(DragDropHelper.DropEvent, handler);
}
}
public static void RemoveDropHandler(DependencyObject d, RoutedEventHandler handler)
{
UIElement uie = d as UIElement;
if (uie != null)
{
uie.RemoveHandler(DragDropHelper.DropEvent, handler);
}
}
DropEventArgs代码
class DropEventArgs : RoutedEventArgs
{
public object Data { get; private set; }
public int Index { get; private set; }
public DropEventArgs(RoutedEvent routedEvent, object data, int index)
: base(routedEvent)
{
Data = data;
Index = index;
}
}
答案 0 :(得分:6)
几个小时后检查样本和我的代码,问题是因为事件的事件定义确实。(感谢Mihir和Dabblernl)。
通过提供事件类型而不是Handler类型,我在RegisterRoutedEvent方法的第3个参数中犯了一个错误。
正确的代码如下:
public delegate void DropEventHandler(object sender, DropEventArgs e);
public static readonly RoutedEvent DropEvent = EventManager.RegisterRoutedEvent(
"Drop", RoutingStrategy.Bubble, typeof(DropEventHandler), typeof(DragDropHelper));
错误消息具有误导性。