在WPF程序中,我想獲取當前(鍵盤)焦點,將其存儲並稍後重新設置。獲取並恢復WPF鍵盤焦點
要獲得目前的工作重點,現在我使用:
DependencyObject focusScope = FocusManager.GetFocusScope(d);
_lastFocus = FocusManager.GetFocusedElement(focusScope);
要設置後來我用:
if (_lastFocus != null)
{
IInputElement setFocus = _lastFocus;
_lastFocus = null;
d.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new ThreadStart(delegate
{
FocusManager.SetFocusedElement(d, setFocus);
}));
}
只能用一次。但是如果我再試一次,它將不起作用,直到我重新創建我試圖設置焦點的有問題的對話框,即使它做了同樣的事情(我追蹤到了並設置焦點)。主窗口本身就是焦點所在。
我曾經聽說WPF中有兩種焦點,我是否還需要設置其他的東西來獲得一致的結果?
太棒了!我在設置邏輯焦點時添加了Keyboard.Focus(setFocus),現在它可以工作,非常感謝! – Sam
通過使用[FocusManager.IsFocusScope](http://msdn.microsoft.com/zh-cn/library/system.windows.input.focusmanager.isfocusscope),您實際上可以完全消除捕獲/恢復代碼。 ASPX)。 – Olly
*某些類(例如Panel基類)的Focusable默認設置爲false *。這是我的關鍵。 – dotNET