gpt4 book ai didi

带有新处理程序的 WPF RemoveHandler

转载 作者:行者123 更新时间:2023-12-04 12:26:05 25 4
gpt4 key购买 nike

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

它通常是这样的(伪代码):

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

这基本上似乎创建了一个委托(delegate)的新实例并传递它,以便将其添加到委托(delegate)列表中。到现在为止还挺好。

但是,要删除它,您可以:
UIElement.RemoveHandler(routedEvent, new EventHandler(handler));

这似乎只是删除了一个新实例,而不是前一个。

这里发生了什么?

最佳答案

您不能传递对新 EventHandler 的引用如果您想稍后将其删除,则不要保留任何引用。

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

这是有效的,即事件处理程序仅在 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" />

关于带有新处理程序的 WPF RemoveHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44758172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com