在WPF 4.0中,如果在加载后在窗口中交换用户控件,我似乎无法使用任何键盘快捷键。一个代码示例说了千言万语,所以这就是我正在做的事情:
Window window = new Window { Width = 800, Height = 600 };
window.Loaded += delegate
{
editor = new EditorRoot();
window.Content = editor;
};
app.Run(window);
window
获取KeyDown事件(并且路由命令正常工作),但editor
永远不会获得任何键盘事件(也不会在其中进行任何控制)。我试过了:
editor.Loaded += (sender, e) => Keyboard.Focus(editor);
......但那没有做任何事情。 EditorRoot
延伸UserControl
并IsFocusable=true
任何想法有什么不对?
答案 0 :(得分:2)
也许你可以试试FocusManager
而不是你的方法。我使用它并且它可以工作,你甚至可以在XAML中使用它:
FocusManager.FocusedElement=editor;
答案 1 :(得分:2)
如果这不起作用 - 请使用Dispatcher.BeginInvoke。根据我的经验 - 同步设置焦点并不总是有效。而且不仅仅是在WPF 4中。