2012-08-13 195 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