2009-03-15 1 views
2

С помощью рефлектора вы можете видеть, что пользовательский интерфейс WPF переопределяет параметр AdjustBranchSource.WPF internal: Почему UserControl переопределяет AdjustBranchSource?

internal override void AdjustBranchSource(RoutedEventArgs e) 
{ 

    e.Source = this; 

} 

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

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

ответ

3

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

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

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

1

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

+0

Я мог бы, это боль. Вы получите ButtonChrome или другой элемент как часть. После этого вам нужно будет вывести элемент из визуального дерева. не очень. – ArielBH

Смежные вопросы