如果我在TextBox中键入一个字母,并且其内容根据我的按键更改,为什么KeyDown事件会继续冒泡?我原本以为这会在现阶段“处理”。
答案 0 :(得分:4)
由于KeyDown
事件是bubbling event
,因此在您的案例窗口中将其冒泡到其父级。如果您不希望它冒泡到您的窗口,您需要将它标记为在textBox处理程序本身处理,如下所示 -
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
然而,如果您尝试将事件PreviewKeyDown
挂钩到textBox中,您将看到 - Window的PreviewKeyDownEvent首先被调用,后来被调用。这背后的原因是,它是tunelling event
。有关路由策略,请参阅此链接 - Routing Strategies
修改强>
Morevoer,如果你想检查KeyDown事件是否来自textBox,你可以检查你的eventArgs的OriginalSource
-
private void Window_KeyDown(object sender, KeyEventArgs e)
{
// Check to make sure event comes from window and not from textbox.
if(e.OriginalSource is Window)
{
}
}