如果我在 TextBox 中键入一个字母,并且它的内容会根据我的按键而改变,为什么 KeyDown 事件会继续冒泡?我原以为这会在这个阶段得到“处理”。
问问题
3582 次
1 回答
4
由于KeyDown
event 是 a bubbling event
,这就是为什么它在您的案例 Window 中冒泡到其父级的原因。如果您不希望它冒泡到您的窗口,您需要像这样在您的 textBox 处理程序本身中将其标记为已处理 -
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
然而,如果您尝试在您的文本框中挂钩事件PreviewKeyDown
,您会看到 - Window 的 PreviewKeyDownEvent 首先被调用,然后是您的文本框。背后的原因是,它是一个tunelling event
. 有关路由策略,请参阅此链接 -路由策略
编辑
Morevoer,如果你想检查KeyDown事件是否来自textBox,你可以检查OriginalSource
你的eventArgs -
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)
{
}
}
于 2012-09-03T14:02:25.483 回答