【发布时间】:2012-04-17 17:37:55
【问题描述】:
问题:
- 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 客户端
【问题讨论】:
标签: wpf keyup routedevent