在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