WPF TabControl在SelectionChanged上,将焦点设置为文本字段

Nat*_*ate 5 c# wpf tabs focus selectionchanged

我有一个标签控件和一些标签项.我成功地听了这个SelectionChanged事件,并检查我感兴趣的标签是否是当前选中的标签.

我正在使用这个代码(下面),并通过调试器,我可以看到我的分支逻辑按设计工作; 但是,我遇到的问题是某些内容覆盖了此调用,txt.Focus()因为在显示正确的选项卡项后,焦点不在文本框上.

private void tabMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // exact same behavior with and without this line
    e.Handled = true;

    if (e.AddedItems.Contains(usrTab))
    {
        txtusr.Focus();
    }
    else if (e.AddedItems.Contains(svcTab))
    {
        txtsvc.Focus();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我只是放入txtusr.Focus()一个按钮事件处理程序,它就会完全按照我的预期进行聚焦.

我怀疑这与.Focus()调用方法时没有加载的tabitem内容有关,但我不确定如何修复它.

mdm*_*m20 10

尝试将focus()调用放在dispatcher.BeginInvoke中.

Dispatcher.BeginInvoke(new Action(() => { txtsvc.Focus(); }));
Run Code Online (Sandbox Code Playgroud)

  • 是的,在这种情况下,它并不是关于线程的.某些控件在内部使用Dispatcher.Invoke/BeginInvoke.通过将任务添加到Dispatcher队列的末尾,您可以允许其前面的所有内容完成(只要您的任务的优先级与其他任务相同或更低).这至少是我的理解. (2认同)