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

时间:2010-10-19 17:50:02

标签: c# wpf focus tabs 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();
    }
}

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

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

1 个答案:

答案 0 :(得分:10)

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

Dispatcher.BeginInvoke(new Action(() => { txtsvc.Focus(); }));