WPF:无法设置焦点

时间:2009-09-08 19:33:51

标签: wpf user-interface xaml controls focus

我想从PreviewTextInput处理程序中创建一个新控件并将焦点设置为它。但即使在新控件上调用Focus()之后,光标仍然在旧文本框中。 处理程序UserControl_PreviewTextInput在UserControl上注册,如果这很重要,则包含此文本框。

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

CodeLineControl的定义类似于(简化):

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

Focus()是否存在一些限制?我不允许将Focus()从PreviewTextInput处理程序中移出TextBox吗?我不能把注意力集中在新创建的元素上吗?

2 个答案:

答案 0 :(得分:18)

这是我用来代替Focus的扩展方法:

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

无需创建计时器。

答案 1 :(得分:3)

创建一个DispatcherTimer,在延迟

后调用该文本框上的Focus