Внутренний WPF: почему UserControl переопределяет AdjustBranchSource? - PullRequest
2 голосов
/ 16 марта 2009

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

    internal override void AdjustBranchSource(RoutedEventArgs e)
{

   e.Source = this;

}

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

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

Ответы [ 2 ]

3 голосов
/ 16 марта 2009

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

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

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

1 голос
/ 16 марта 2009

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

...