问题:
- KEYUP通过在主窗口中的网格处理(
Grid_KeyUp
) - 主窗口显示了一个子窗口(如
MessageBox.Show(...)
- 用户按下[返回](
Keys.Return
)关闭MessageBox
- 主窗口实际上在MessageBox的那个按键获取KeyUp事件
我有一个非常简单的孤立样本,显示我有这个问题。 只需创建一个空的WPF项目并使用此XAML:
<Grid KeyUp="Grid_KeyUp">
<Button Click="Button_Click"></Button>
</Grid>
和代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Grid_KeyUp(object sender, KeyEventArgs e)
{
Console.WriteLine("KEYUP: " + e.Key);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this, "TEST");
}
}
如果您单击该按钮,然后按[返回]关闭MessageBox的输出窗口将打印:
KEYUP: Return
奇怪的事实:
- 按下时,我得到了相同的行为[逃生](
KEYUP: Escape
获取打印),但是当我按下[空格]控制台不打印出来的东西! - e.Source和e.OriginalSource点在主窗口中的按钮(其是,很明显,错误的)。
- 如果你把一个断点右后
MessageBox.Show(...)
的事件不会得到由出KEYUP处理器(即输出为空)来处理。
任何人都可以向我解释发生了什么?
PS目标框架是:.NET 4客户端