2012-08-13 131 views
0

父窗口被设计为连接了关键事件。 的主窗口是这样:父窗口处理来自WPF中子窗口的Keyup事件

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(); 
     } 
    } 
} 

有一个按钮确定关闭窗口,规定消息是这样:

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键确认按钮并按下Enter键。 子窗口MessageWindow再次弹出。

原因:在子窗口上按下RETURN键关闭它时,父窗口收到KeyUp事件。

请提供一种方法来停止父代处理KeyUp事件,而不是使用FLAG。

回答

0

尝试使用PreviewKeyDown事件代替KeyUp一个

+0

非常感谢! – Nishant 2012-08-13 10:06:35

+1

这个答案是正确的,但我想补充一点,这是因为PreviewX事件从根元素向下隧道到最嵌套的元素,而普通的X事件从最嵌套元素直到根元素。 这意味着根元素获得处理隧道事件的第一个机会和处理冒泡事件的最后机会。 – Fenton 2012-09-20 09:28:08