WPF - 知道哪个控件最终会获得焦点

WPF - Knowing which control will end up with focus

我一直在玩弄 WPF 中的事件,到目前为止,我已经从事件参数的 'Source' 和 'OriginalSource' 属性以及使用发送控件中学到了很多东西和焦点管理器。事情是这样的,当一连串事件开始触发时,有没有办法知道在整个事件链中没有任何干预逻辑的情况下,哪个控件将在最后以焦点结束?

恐怕唯一可靠的方法实际上是让焦点发生变化,然后在顶视图级别的某些 PreviewGotKeyboardFocus 处理程序中处理它。

然后您可以知道哪个控件将获得焦点,并使用 e.Handled = true 取消更改。

PD。所有 UIElements 中都有一个名为 PredictFocus 的函数,但它仅适用于位置遍历更改,不适用于基于选项卡的更改(或自定义聚焦)。