親ウィンドウは、keyup イベントが付加された状態で設計されています。MainWindow は次のようになります。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_KeyUp(object sender, KeyEventArgs e)
{
if (e != null && e.Key == Key.Return)
{
MessageWindow msgWindow = new MessageWindow("KEY UP");
msgWindow.Show();
}
}
}
ウィンドウを閉じるボタン OK を持つ MessageWindow は、次のようになります。
public partial class MessageWindow : Window
{
public MessageWindow()
{
InitializeComponent();
}
public MessageWindow(string message) : this()
{
txtMess.Text = message;
}
private void btnOk_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
親で[戻る]として入力キーを受け取ると、新しい子ウィンドウが初期化されて表示されます。TAB を押して OK ボタンにフォーカスし、Enter を押します。子 MessageWindow が再びポップアップします。
理由: 子ウィンドウで RETURN キーを押して閉じると、親ウィンドウは KeyUp イベントを受け取ります。
FLAG を使用する以外に、親による KeyUp イベントの処理を停止する方法を提供してください。