使用新处理程序

时间:2017-06-26 10:57:55

标签: wpf event-handling

我在许多答案中都看到了这一点,我无法弄清楚它是如何运作的。

它通常采用这种方式(伪代码):

UIElement.AddHandler(routedEvent, new EventHandler(handler));

基本上似乎来创建委托的新实例并将其传递,以便将其添加到委托列表中。到目前为止,非常好。

但是,要删除它,你可以:

UIElement.RemoveHandler(routedEvent, new EventHandler(handler));

只有似乎才能删除新实例,而不是之前的实例。

这是怎么回事?

1 个答案:

答案 0 :(得分:2)

如果您希望以后能够将其删除,则无法通过对您未提及任何引用的新EventHandler的引用。

将处理程序转换为适当的委托类型。

这样做,即只在点击Button时调用一次事件处理程序:

<强>代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        btn.AddHandler(Button.ClickEvent, (RoutedEventHandler)OnClick);
    }

    private void OnClick(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("click");
        btn.RemoveHandler(Button.ClickEvent, (RoutedEventHandler)OnClick);
    }
}

XAML:

<Button x:Name="btn" Content="Button" />