UIElement.AddHandler () vs .Event + = определение - PullRequest
11 голосов
/ 27 января 2010

1-я часть вопроса: В чем разница между этими двумя регистрациями событий?

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

_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown);

2-я часть вопроса: или в конечном итоге против

popUp.Opened += PopUp_Opened;

Ответы [ 2 ]

10 голосов
/ 27 января 2010

Согласно Отражатель Редгейта , разницы нет. Оба метода в конечном итоге вызывают внутренний метод EventHandlerStore.AddRoutedEventHandler. Это выходные данные рефлектора средства доступа add для события PreviewMouseLeftButtonDown (в классе UIElement):

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

Как видите, для вас UIElement.AddHandler.

Прежде чем редактировать свой вопрос, вы спрашивали о событии Opened всплывающего окна. В этом случае есть разница: во-первых, событие Opened реализовано не как перенаправленное событие, а как простое событие, поэтому вы даже не можете использовать вызов AddHandler для него. Во-вторых, рефлектор показывает, что в EventHandlerStore вызывается другой метод, который добавляет обработчик в простой набор делегатов.

5 голосов
/ 08 мая 2012

Важной вещью может быть AddHandler(xxx,xxx, false).

Если вы используете true, вы можете перехватывать события, которые уже были обработаны, что может быть полезно, если вы подкласса управляете такими элементами, как TextBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...