WPF:无法设置焦点

WPF:无法设置焦点

问题描述:

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

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> 

有没有对焦点()一些限制荫不是AWRE什么?我不允许将Focus()从PreviewTextInput处理程序中的TextBox移开?我不能将焦点放在新创建的元素上吗?

创建延迟

+0

这是为什么这是必需的?我将新控件添加到了gui中,因此它应该是可见的和可聚焦的。 – codymanix 2009-09-08 19:48:02

+0

我认为它会在一个单独的线程中异步呈现,并且在完成之前您无法专注于它。或者,可能是在添加新控件后,WPF会自行更改焦点。也许失落的焦点事件在某个时候被解雇了?你可以写一个日志文件来查看哪些控件获得/失去焦点。 http://www.julmar.com/blog/mark/PermaLink,guid,6e4769e5-a0b3-47b2-a142-6dfefd0c028e.aspx – 2009-09-09 16:24:51

这之后调用关注的是文本框一个DispatcherTimer是扩展方法,而不是我使用的焦点:

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

无需创建一个定时器。

+2

伟大的解决方案! +1 – Dabblernl 2009-12-06 22:51:15

+0

我偷你的codez!我改名为['FocusLikeChuckNorris'](http://www.chucknorrisfacts.com)! (1) – 2011-09-19 18:45:05