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移开?我不能将焦点放在新创建的元素上吗?
创建延迟
这之后调用关注的是文本框一个DispatcherTimer是扩展方法,而不是我使用的焦点:
public static void BackgroundFocus(this UIElement el)
{
Action a =() => el.Focus();
el.Dispatcher.BeginInvoke(DispatcherPriority.Background, a);
}
无需创建一个定时器。
伟大的解决方案! +1 – Dabblernl 2009-12-06 22:51:15
我偷你的codez!我改名为['FocusLikeChuckNorris'](http://www.chucknorrisfacts.com)! (1) – 2011-09-19 18:45:05
这是为什么这是必需的?我将新控件添加到了gui中,因此它应该是可见的和可聚焦的。 – codymanix 2009-09-08 19:48:02
我认为它会在一个单独的线程中异步呈现,并且在完成之前您无法专注于它。或者,可能是在添加新控件后,WPF会自行更改焦点。也许失落的焦点事件在某个时候被解雇了?你可以写一个日志文件来查看哪些控件获得/失去焦点。 http://www.julmar.com/blog/mark/PermaLink,guid,6e4769e5-a0b3-47b2-a142-6dfefd0c028e.aspx – 2009-09-09 16:24:51