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