問題:
- 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]を押してメッセージボックスを閉じると、出力ウィンドウに次のように出力されます。
KEYUP: Return
奇妙な事実:
- [Escape](
KEYUP: Escape
印刷される)を押しても同じ動作をしますが、[Space]を押すとコンソールは何も印刷しません! - e.Sourceとe.OriginalSourceは、メインウィンドウのボタンを指しています(これは明らかに間違っています)。
MessageBox.Show(...)
イベントがoutKeyUpハンドラーによって処理されない(つまり、出力が空である)直後にブレークポイントを設定した場合。
誰かが私に何が起こっているのか説明してもらえますか?
PSターゲットフレームワークは次のとおりです。.NET4クライアント