WPF RemoveHandler与新的处理程序
我在很多答案中都看到了这一点,但我不知道它是如何工作的 它通常是这样的(伪代码): 它基本上似乎创建了一个委托的新实例并传递它,以便将其添加到委托列表中。到目前为止,一切顺利 但是,要删除它,您需要:WPF RemoveHandler与新的处理程序,wpf,event-handling,Wpf,Event Handling,我在很多答案中都看到了这一点,但我不知道它是如何工作的 它通常是这样的(伪代码): 它基本上似乎创建了一个委托的新实例并传递它,以便将其添加到委托列表中。到目前为止,一切顺利 但是,要删除它,您需要: UIElement.RemoveHandler(routedEvent, new EventHandler(handler)); 这似乎只是删除了一个新实例,而不是前一个实例 这里发生了什么?如果您希望以后能够删除新的EventHandler的引用,则不能将该引用传递给不保留任何引用的新的Eve
UIElement.RemoveHandler(routedEvent, new EventHandler(handler));
这似乎只是删除了一个新实例,而不是前一个实例
这里发生了什么?如果您希望以后能够删除新的
EventHandler
的引用,则不能将该引用传递给不保留任何引用的新的EventHandler
将处理程序强制转换为适当的委托类型
这是有效的,即当单击按钮时,事件处理程序仅被调用一次:
代码:
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" />
<Button x:Name="btn" Content="Button" />