‘在 WPF 中,有兩個與焦點有關的主要概念:鍵盤焦點和邏輯焦點。 鍵盤焦點指接收鍵盤輸入的元素,而邏輯焦點指焦點范圍中具有焦點的元素。 本概述將詳細介紹這些概念。 理解這些概念之間的區別對於創建具有可以獲取焦點的多個區域的復雜應用程序是非常重要的。’ 摘自 Microsoft MSDN 焦點概述
一直以來,我寫的項目都有鍵盤焦點的問題,比如 Click 了一個 Button 以後出現下次按回車還會觸發 Click ,還有就是 TextBox 輸入完成後想把鍵盤焦點轉移到其他非 TextBox 輸入框的控件上。
後面在解決這個問題的過程中看到一篇在 stackoverflow 上的提問,發現了可以使用 Keyboard 和 FocusManager 來移動焦點。
C#:
1 private void Focus(bool value) 2 { 3 if (value) 4 Dispatcher.BeginInvoke(DispatcherPriority.Input,new Action(delegate () 5 { 6 Keyboard.ClearFocus(); //清空鍵盤焦點 7 FocusManager.SetFocusedElement(this, null); //將邏輯焦點移動主窗體 8 Keyboard.Focus(this); //將鍵盤焦點已到主窗體 9 })); 10 }
引用
https://msdn.microsoft.com/zh-cn/library/aa969768(v=vs.110).aspx