2011-03-07 56 views
2

如何防止用關閉窗口輸入鍵可編輯控件中的焦點?如何防止用「Enter」鍵關閉窗口而WPF中的可編輯控件中的焦點

通常,我使用IsCancel=True進行取消,並使用IsDefault=True確定取消。這是因爲它將允許用戶關閉對話框輸入爲OK並且Esc爲取消。

但是,問題是按輸入鍵關閉對話框,即使鍵盤焦點在可編輯控件中,如TextBox。 最佳行爲是按輸入只有當鍵盤焦點不在可編輯控件中時,纔會關閉對話框。但是,按輸入鍵兩次應關閉對話框。否則,用戶需要將鍵盤焦點更改爲另一個不可編輯的控件,以關閉輸入鍵。

所以,作爲一種解決方法,我以這種方式實現:

  • 攔截KeyDown事件,並檢查 如果是輸入鍵。
  • 如果是這樣,請檢查鍵盤焦點是否在Ok按鈕處爲 。
  • 如果是這樣,用Ok 按鈕關閉對話框。否則,將 鍵盤焦點更改爲確定按鈕。所以,點擊輸入鍵兩次將關閉對話框。

這有一個問題,因爲第一輸入將焦點切換到OK按鈕,所以如果焦點不在OK按鈕,用戶需要點擊輸入兩次。這與理想的行爲有點不同。另外,我需要在每個對話框中實現這個邏輯。

有人有一個好主意來解決這個問題嗎?

回答

2

如果尋找這個特定的行爲,我只想簡單地在KeyDown事件的一些布爾值設置爲true處理程序中的第一次輸入被擊中(而不是切換焦點)。然後,在下一個KeyDown事件,我會檢查是否鍵擊是輸入如果輸入已被擊中。爲了在多個對話框中實現這個功能,我會創建一個通用對話框,在該對話框中,我將覆蓋OnKeyDown方法,而不是訂閱該事件,然後對該對話框進行子類化。

(話雖如此,作爲一個用戶我不喜歡這種行爲在所有我會建議只是忽略了在文本框時共輸入關鍵 - 這就是用戶習慣。)

2

處理PreviewKeyDown並取消事件。

相關問題