为什么KeyDown事件会从TextBox中冒出来?

时间:2012-09-03 13:18:26

标签: wpf keyboard

如果我在TextBox中键入一个字母,并且其内容根据我的按键更改,为什么KeyDown事件会继续冒泡?我原本以为这会在现阶段“处理”。

1 个答案:

答案 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)
    {
    }
}