我有一个解决方案,它有两个项目,主要项目和一个小型共享控件。在我们的应用程序中,某个功能会在新窗口中打开此共享控件。我希望在窗口打开时将焦点设置到此控件中的第一个组合框。
在我的代码中,在加载共享控件的窗口上,在_Loaded事件结束时,我将焦点设置为此组合框。但是当运行代码时 - 我仍然必须按Tab键将'键盘'焦点放在盒子上(因为,我必须按Tab键然后开始键入列表中某个项目的名称)。
如果我在这里设置一个断点,点击它,然后继续 - 它实际上是按照它应该的方式设置的。如果我使用WPF检查器 - 也设置了IsFocused。
其他注意事项:
如何正确设置焦点?在'main'项目中的另一个组合框中,只需调用.Focus()就可以正常工作。
答案 0 :(得分:3)
尝试在处理完所有事件并使用QueueUserWorkItem更新绑定后推迟focus()。像这样:
public delegate void VoidDelegate();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// Some other things to do here.
System.Threading.ThreadPool.QueueUserWorkItem
(x => this.Dispatcher.Invoke(
new VoidDelegate(SetFocus), null));
}
private void SetFocus()
{
MyControlIWantToSetFocusOn.Focus();
}