Внутренний WPF: почему UserControl переопределяет AdjustBranchSource?

Используя рефлектор, вы можете видеть, что WPF UserControl переопределяет AdjustBranchSource.

    internal override void AdjustBranchSource(RoutedEventArgs e)
{

   e.Source = this;

}

Моя собственная проблема касается несоответствия, вызванного этой проблемой. Когда элемент находится внутри пользовательского элемента управления или снаружи. Параметр Source ведет себя иначе. Что меня удивляет, источник всегда должен быть элементом цели RoutedEvent.

Вопрос в том, почему это реализовано именно так?


person ArielBH    schedule 15.03.2009    source источник


Ответы (2)


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

Если вам нужно различать разные кнопки в UserControl, тогда UserControl должен иметь свои собственные события, которые вызывают кнопки. Таким образом, снаружи это выглядит как правильное событие, и пользователю UserControl не нужно знать, какая кнопка вызвала какое событие.

Чтобы привести пример, в списке, вам нужно знать, что кнопка прокрутки вниз была кнопкой, которая отправила исходное событие? Или вам просто нужно знать, что было запущено событие прокрутки вниз.

person Cameron MacFarland    schedule 15.03.2009

Источник маршрутизируемого события может меняться в процессе маршрутизации события. Я не совсем понимаю, почему UserControl изменяет его, но не могли бы вы просто использовать свойство OriginalSource в RoutedEventArgs вместо этого?

person Kent Boogaart    schedule 15.03.2009
comment
Я мог бы, это боль. Вы получите ButtonChrome или другой элемент, например часть. После этого вам нужно будет вывести элемент из визуального дерева. не красиво. - person ArielBH; 16.03.2009