Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF TabControl On SelectionChanged, set focus to a text field

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.

like image 921
Nate Avatar asked Oct 19 '10 17:10

Nate


1 Answers

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

Dispatcher.BeginInvoke(new Action(() => { txtsvc.Focus(); }));
like image 149
mdm20 Avatar answered Oct 06 '22 00:10

mdm20