我正在尝试自定义路由事件,但在使用附加事件处理程序进行编译时,我得到了一个TargetInvocationException。
我在自定义控件EventRaiserControl
中有以下代码:
public static readonly RoutedEvent KickedEvent = EventManager.RegisterRoutedEvent("KickedEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(EventRaiserControl));
public event RoutedEventHandler Kicked
{
add
{ this.AddHandler(KickedEvent, value); }
remove
{ this.RemoveHandler(KickedEvent, value); }
}
private void btn1_Click(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(KickedEvent));
}
然后我在主窗口中有以下XAML:
<StackPanel local:EventRaiserControl.Kicked="StackPanel_Kicked">
<local:EventRaiserControl Kicked="EventRaiserControl_Kicked"/>
</StackPanel>
在MainWindow代码后面有以下处理程序:
private void StackPanel_Kicked(object sender, RoutedEventArgs e)
{
Console.WriteLine("Caught Kicked Event at Panel level.");
}
private void EventRaiserControl_Kicked(object sender, RoutedEventArgs e)
{
Console.WriteLine("Caught Kicked Event at Control level.");
}
我的代码可以正常使用此处理程序:
<local:EventRaiserControl Kicked="EventRaiserControl_Kicked"/>
但是当我添加附加的处理程序时,TargetInvocationException
失败了:
<StackPanel local:EventRaiserControl.Kicked="StackPanel_Kicked">
有人可以帮忙吗?我错过/误用了什么?
非常感谢
答案 0 :(得分:1)
起初我很惊讶它为什么,但我在编码后看到了原因。只需改变
EventManager.RegisterRoutedEvent("KickedEvent"....
到
EventManager.RegisterRoutedEvent("Kicked"....