3

我注意到当一个窗口正在处理由其中的文本框引发的 KeyDown 事件并将事件 Handled 标志设置为 true 时,文本框会忽略按下的键并且不会将其添加到其内容中。

根据我对事情如何工作的理解,PreviewKeyDown 事件如果首先从窗口隧道到 TextBox,然后 KeyDown 事件从 TextBox 冒泡到窗口。当窗口的事件处理程序开始设置 Handled 事件时,该事件不再由 TextBox 处理,但我确实看到它有效果,并且按下的键不会添加到 TextBox。

有人可以解释这是如何工作的吗?

(这是一个普遍的问题,但在我看到我们正在使用的第三方控件中的类似行为后提出,这给我带来了问题,因为我希望控件处理事件但阻止它向上冒泡。)

4

1 回答 1

0

好吧,实际上,无论是否处理,这些事件总是会冒泡/隧道。只是大多数事件处理程序都没有注册以接收“已处理”事件。

例如,可以选择订阅 KeyDown 事件并接收“呼叫”,即使它是在某个地方处理的。

但是,是的,事件的顺序通常是从顶部(隧道)开始,然后隧道回到元素并冒泡。

如果您有更多问题,请告诉我。

于 2012-10-11T19:42:14.673 回答