2012-10-11 38 views
3

我注意到,當一個窗口正在處理其中的文本框引發的KeyDown事件並將事件Handled標誌設置爲true時,文本框忽略了按下的按鍵並不會將其添加到其內容中。WPF文本框「知道」KeyDown事件是如何處理的

根據我對事物如何工作的理解,如果首先從窗口到文本框,然後是KeyDown事件,PreviewKeyDown事件從文本框冒泡到窗口。當窗口的事件處理程序獲取設置Handled事件時,該事件不再由TextBox處理,但我確實看到它具有效果,並且按下的鍵不會添加到TextBox。

有人可以解釋這是如何工作的?

(這是一個普遍的問題,但是在我們使用的第三方控件中看到類似的行爲後引發了這個問題,並且它引發了一些問題,因爲我希望控件處理事件但阻止它冒泡)

回答

0

那麼,事實上,無論是否處理這些事件,這些事件總是會冒泡/隧道。只是大多數事件處理程序沒有註冊才能接收「已處理」的事件。

例如,可以選擇訂閱KeyDown事件並接收「調用」,即使它在某處處理完畢。

但是,事件的順序通常是從頂端(隧道)開始,然後隧道回到元素和氣泡。

如果您還有其他問題,請告訴我。

+0

我瞭解事件的順序。我不明白的是,如果TextBox在包含窗口中處理完成(泡泡)時如何獲取事件處理的信息。我希望TextBox在處理事件時檢查Handled標誌,當它到達TextBox時,但事後不會。 – splintor

相關問題