通过使用反射器,您可以看到WPF UserControl正在覆盖AdjustBranchSource。
internal override void AdjustBranchSource(RoutedEventArgs e)
{
e.Source = this;
}
我自己的问题是由该问题引起的不一致。 当元素基于用户控件或外部时。 Source参数的行为有所不同。令我惊讶的是,来源应始终是RoutedEvent的目标元素。
问题是为什么这样实施?
答案 0 :(得分:3)
这有点道理。如果您将UserControl视为黑盒子,那么您不应该知道它上面有什么控件,因此也不知道事件的来源。
如果您需要区分UserControl上的不同按钮,那么UserControl应该拥有按钮触发的自己的事件。从外面看,它看起来像是正确的事件,UserControl的用户不需要知道哪个按钮做了哪个事件。
举个例子,在列表框中,您是否需要知道向下滚动按钮是发送原始事件的按钮?或者您只需要知道触发了向下滚动事件。
答案 1 :(得分:1)
路由事件的来源可能会在整个事件路由中发生变化。我不完全确定为什么UserControl
会对其进行更改,但您不能只使用RoutedEventArgs
上的OriginalSource
属性吗?