问题:
- KeyUp 由主窗口中的网格处理 (
Grid_KeyUp
) - 主窗口显示一个子窗口(例如
MessageBox.Show(...)
) - 用户按 [Return] (
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");
}
}
如果单击按钮并按 [Return] 关闭 MessageBox,输出窗口将打印:
KEYUP: Return
奇怪的事实:
- 按 [Escape] 时我得到相同的行为(
KEYUP: Escape
被打印),但是当我按 [Space] 时,控制台不会打印出任何东西! - e.Source 和 e.OriginalSource 指向主窗口中的按钮(这显然是错误的)。
- 如果您
MessageBox.Show(...)
在事件未由 out KeyUp 处理程序处理后立即放置断点(即输出为空)。
谁能向我解释发生了什么?
PS目标框架是:.NET 4 Client