Как отличить отправителя от источника в маршрутизируемых событиях WPF

#wpf #events

#wpf #Мероприятия

Вопрос:

Я хотел бы получить четкое объяснение о том, как определить в каждой ситуации, какой элемент управления является отправителем, а какой — источником для события маршрутизируемого события WPF как в случае туннелирования, так и в случае событий с пузырьками.

Редактировать: Предположим, у вас есть обработчик событий и два элемента управления, один дочерний элемент другого. Обработчик находится в родительском элементе управления. Как бы я узнал заранее и без отладки, какой элемент управления передается как отправитель, а какой как e.source? И меняется ли это, когда вы рассматриваете события с пузырьками или туннелированием?Общая концепция событий мне понятна, но я хотел бы понять, какой параметр использовать в eventhandler для идентификации обоих элементов управления без отладки

Комментарии:

1. Звучит так, как будто вы хотите, чтобы мы погуглили для вас

Ответ №1:

Вероятно, не существует исчерпывающего «четкого объяснения», потому что существует так много способов, которыми вы могли бы получить события. Особенно, когда используется много событий EventArgs.Empty , потому что нет других деталей, кроме источника.

http://msdn.microsoft.com/en-us/library/17sde2xt (v = VS.100).aspx

или, более конкретно:

RoutedEvent: источник против OriginalSource

У вас есть конкретный вопрос, на который вам нужен ответ?

Редактировать: из приведенной выше статьи, с ответом, похожим на ваш комментарий

Рассмотрим пользовательский элемент управления (в этом примере называемый CustomControl1), который состоит из текстового блока. Когда в текстовом блоке вызывается событие MouseDown, свойством OriginalSource будет TextBlock, но в обработчике CustomControl1 источник будет изменен на объект CustomControl1, чтобы другие элементы вдоль маршрута события знали, что CustomControl1 получил наведение курсора мыши.

Комментарии:

1. Я говорю о событиях WPF. Эта ссылка более подходящая: msdn.microsoft.com/en-us/library/ms742806.aspx

2. @luca: похоже, у вас есть свой ответ? Я не уверен, что эта ссылка не учитывает. Не могли бы вы быть более конкретными?

3. добавлена ссылка с дополнительными объяснениями того, что это такое, почему они отличаются.

4. Предположим, у вас есть обработчик событий и два элемента управления, один дочерний элемент другого. Обработчик находится в родительском элементе управления. Как бы я узнал заранее и без отладки, какой элемент управления передается как отправитель, а какой как e.source? И меняется ли это, когда вы рассматриваете события с пузырьками или туннелированием? Общая концепция событий мне ясна, но я хотел бы понять, какой параметр использовать в eventhandler для идентификации обоих элементов управления без отладки.