在WPF中使用自定义RoutedEvent会导致TargetInvocationException

时间:2011-10-20 10:55:24

标签: wpf routed-events

我正在尝试自定义路由事件,但在使用附加事件处理程序进行编译时,我得到了一个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">

有人可以帮忙吗?我错过/误用了什么?

非常感谢

1 个答案:

答案 0 :(得分:1)

起初我很惊讶它为什么,但我在编码后看到了原因。只需改变

EventManager.RegisterRoutedEvent("KickedEvent"....

EventManager.RegisterRoutedEvent("Kicked"....