By Using reflector you can see that WPF UserControl is overriding AdjustBranchSource.
internal override void AdjustBranchSource(RoutedEventArgs e)
{
e.Source = this;
}
My very own problem regards inconsistency caused by that issue. When an element is based inside a user control or outside. The Source parameter behaves differently. Which surprises me the source should always be the element in target by the RoutedEvent.
The question is why was it implemented like that?