WPF文本框如何“知道”KeyDown事件已被处理

3
我注意到当一个窗口处理由其中的文本框引发的KeyDown事件并将事件Handled标志设置为true时,文本框会忽略按下的键并不将其添加到其内容中。
根据我的理解,PreviewKeyDown事件首先从窗口向TextBox进行隧道传输,然后KeyDown事件从TextBox向窗口冒泡。当窗口的事件处理程序设置Handled事件时,事件不再由TextBox处理,但我确实看到它产生了影响,按下的键没有添加到TextBox中。
有人可以解释一下这是如何工作的吗?
(这是一个通用问题,但在我看到我们正在使用的第三方控件中出现了类似的行为后提出,这给我带来了问题,因为我希望控件处理事件但停止它向上冒泡。)
1个回答

0

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

例如,有选项可以订阅KeyDown事件并接收“调用”,即使它在某个地方被处理了。

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

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


我理解事件的顺序,但我不明白的是,如果在包含窗口中处理事件时是通过冒泡方式完成的,那么TextBox如何获取到已处理该事件的信息。当事件传递到TextBox时,我期望它会检查Handled标志来处理事件,但之后就不再需要了。 - splintor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接