c# – WPF TabControl On SelectionChanged, set focus to a text field – Education Career Blog

I have a tab control, and a few tab items. I am successfully listening to the SelectionChanged event, and checking if the tab I’m interested in is the currently selected one.

I’m using this code (below), and stepping through the debugger, I can see that my branching logic works as designed; however, the issue I’m having is that something is overriding this call to txt.Focus() because after the correct tab item is displayed, the focus is not on the text box.

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();
    }
}

If I just put txtusr.Focus() in a button event handler, it focuses exactly as I’d expect.

I suspect that this has to do with the tabitem content not being loaded at the time the .Focus() method is called, but I’m not sure how to go about fixing it.

,

Try putting the .Focus() calls inside a dispatcher.BeginInvoke.

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

Leave a Comment