Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF: Cannot set focus

I want that from the PreviewTextInput handler a new control is created and focus is set to it. But even after calling Focus() on the new control, the cursor is still in the old textbox. The handler UserControl_PreviewTextInput is registered on the UserControl which contains this textbox if this matters.

private void UserControl_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
            CodeLineControl el = new CodeLineControl();
            container.Children.Insert(idx+1, el);
            el.innerTextBox.Focus();
}

CodeLineControl is defined like that(simplified):

<UserControl ..>
    <DockPanel Name="codeline"  Background="AntiqueWhite" >           
         <TextBox Name="innerTextBox"/>      
    </DockPanel>  
</UserControl>

Are there some limitations on Focus() that Iam not awre about? Am I not allowed to move Focus() away from a TextBox from a PreviewTextInput handler? Can't I set the focus on newly created elements?

like image 478
codymanix Avatar asked Sep 08 '09 19:09

codymanix


2 Answers

This is the extension method I use for instead of Focus:

    public static void BackgroundFocus(this UIElement el)
    {
        Action a = () => el.Focus();
        el.Dispatcher.BeginInvoke(DispatcherPriority.Background, a);
    }

No need to create a timer.

like image 100
Sergey Aldoukhov Avatar answered Oct 20 '22 21:10

Sergey Aldoukhov


Create a DispatcherTimer that calls Focus on that textbox after a delay

like image 23
Mike Blandford Avatar answered Oct 20 '22 22:10

Mike Blandford