WPF:无法设置焦点

cod*_*nix 6 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();
}
Run Code Online (Sandbox Code Playgroud)

CodeLineControl定义如下(简化):

<UserControl ..>
    <DockPanel Name="codeline"  Background="AntiqueWhite" >           
         <TextBox Name="innerTextBox"/>      
    </DockPanel>  
</UserControl>
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*hov 18

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

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

无需创建计时器.

  • 好方案!+1 (2认同)

Mik*_*ord 3

创建一个 DispatcherTimer,在延迟后调用该文本框上的 Focus