UIElement.AddHandler() 与 .Event += 定义

0

本文介绍了UIElement.AddHandler() 与 .Event += 定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

问题的第一部分:这两个事件注册有什么区别?

1.st part of the quesion: What is the difference between these 2 event registrations ?

_popUp.AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(PopUp_PreviewMouseLeftButtonDown));

_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown);

问题的第二部分:或最终与

popUp.Opened += PopUp_Opened;

推荐答案

根据Redgate的Reflector,没有区别.这两种方法最终都会调用内部方法EventHandlerStore.AddRoutedEventHandler.这是 PreviewMouseLeftButtonDown 事件的 add 访问器的反射器输出(在类 UIElement 中):

According to Redgate's Reflector, there is no difference. Both methods eventually call the internal method EventHandlerStore.AddRoutedEventHandler. This is the reflector output of the add accessor for the PreviewMouseLeftButtonDown event (in the class UIElement):

public void add_PreviewMouseLeftButtonDown(MouseButtonEventHandler value)
{
    this.AddHandler(PreviewMouseLeftButtonDownEvent, value, false);
}

如您所见,它会为您调用 UIElement.AddHandler.

As you can see it calls UIElement.AddHandler for you.

在编辑问题之前,您询问的是弹出窗口的 Opened 事件.在这种情况下,有一个区别:首先,Opened事件不是作为路由事件实现的,而是作为一个简单事件实现的,所以你甚至不能使用AddHandler打电话给它.其次,反射器显示在 EventHandlerStore 中调用了一个不同的方法,它将处理程序添加到一个简单的委托集合中.

Before you edited your question you were asking about the Opened event of the popup. In that case, there is a difference: First, the Opened event is not implemented as a routed event but as a simple event, so you can't even use the AddHandler call on it. Secondly, the reflector shows that a different method is called in the EventHandlerStore which adds the handler to a simple delegate collection.

这篇关于UIElement.AddHandler() 与 .Event += 定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

C# 中的多播委托奇怪行为?
Multicast delegate weird behavior in C#?(C# 中的多播委托奇怪行为?)...
2023-11-11 C#/.NET开发问题
6

参数计数与调用不匹配?
Parameter count mismatch with Invoke?(参数计数与调用不匹配?)...
2023-11-11 C#/.NET开发问题
26

如何将代表存储在列表中
How to store delegates in a List(如何将代表存储在列表中)...
2023-11-11 C#/.NET开发问题
6

代表如何工作(在后台)?
How delegates work (in the background)?(代表如何工作(在后台)?)...
2023-11-11 C#/.NET开发问题
5

没有 EndInvoke 的 C# 异步调用?
C# Asynchronous call without EndInvoke?(没有 EndInvoke 的 C# 异步调用?)...
2023-11-11 C#/.NET开发问题
2

Delegate.CreateDelegate() 和泛型:错误绑定到目标方法
Delegate.CreateDelegate() and generics: Error binding to target method(Delegate.CreateDelegate() 和泛型:错误绑定到目标方法)...
2023-11-11 C#/.NET开发问题
14