2010-02-06 183 views
6

我有一個WPF Textbox,我希望在檢測文本值是否正確之前允許它丟失鍵盤/焦點。阻止WPF文本框失去焦點

我已經嘗試在InputBox_LostFocus & InputBox_LostKeyboardFocus事件中設置e.Handled,但它似乎並沒有達到我想要的。

關於如何鎖定焦點到Textbox的建議?

+5

焦點鎖定會造成非常可惡的用戶體驗。在我花費大量精力試圖弄清楚如何做到這一點之前,我會重新設計用戶界面以不同的方式工作 - 比方說,禁用窗口中的其他所有控件,直到「TextBox」具有有效內容爲止。 – 2010-02-06 19:03:19

+0

@Robert:除非您正在設計收銀機應用程序,否則它實際上是強制性的。在註冊應用程序中,您輸入一個數字或文本,然後通過點擊按鈕來決定實際輸入的內容。 (例如編號然後SKU,編號然後數量,編號然後支付鑰匙等) – HiredMind 2012-04-06 23:09:27

回答

4

您可以致電Mouse.Capture聯繫UIElement。這會給你帶來的每一個鼠標事件都會影響元素與否。但使用起來很棘手。您可以在文本框中捕獲鼠標並註冊丟失的捕獲事件,當您丟失捕獲時可以重新捕獲。你必須警惕奇怪的行爲。一般來說,它的糟糕做法(我認爲)不允許用戶離開現場。什麼是更好的是,讓他們爲所欲爲,但禁止他們進入數據後推,直到所有的字段都有效(或類似的東西)

這裏的按鈕有一些鏈接

other SO question

msdn sample code

組合框中使用鼠標捕獲來告訴用戶是否點擊了應用程序的其他地方關閉組合框,如果它的開放,如果你點擊另一個控制(或窗外)

我不知道這種技術是否會阻止你剔除元素。在wpf應用程序中有兩種焦點。你有邏輯焦點和鍵盤焦點。多個元素可以同時具有邏輯焦點(每個元素都在焦點範圍內)。認爲例如一個文本框可以有邏輯焦點,而你點擊一個菜單(它也有邏輯重點)。鍵盤焦點一次只能在一個地方。你會爲自己做很多工作。我會認真考慮你是否以正確的方式進行互動。你可能花費數天時間才能正確地進行交互如果您停止了文本框失去焦點,如果用戶單擊關閉按鈕會發生什麼情況?

繼承人的msdn article on focus

+0

謝謝亞蘭,這是很好的建議。也許我會看看功能有所不同。 – 2010-02-06 13:14:18

7

要做到這一點,最好的辦法是處理,而事件被隧道到您的文本框被解僱的PreviewLostKeyboardFocus事件。將句柄設置爲true,並且其他任何內容都不會收到通知(這意味着焦點不會從您的文本框中轉移)。希望這可以幫助。

+0

工作就像一個魅力對我來說。很簡單 ! – 2016-05-06 13:47:41