2010-06-24 61 views
16

我在画布中加载了一个用户控件;此默认情况下的用户控件可见性已折叠。当我的窗口的特定文本框被关注时,usercontrol变得可见。当用户控件更改可见性时,将焦点放在文本框上

当usercontrol变得可见时,我想将焦点设置到usercontrol内的另一个文本框。

我试着这样做:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
     if (this.Visibility == Visibility.Visible) 
     {     
      FocusManager.SetFocusedElement(this, TextBlockInput); 
     } 
} 

这似乎工作,但有一个问题:文本框似乎集中,但光标移动到文本框不闪烁,我不能为输入类型字符。

我会在焦点后的文本框准备好输入。我能怎么做?

回答

31

好吧,我这样解决:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    if (this.Visibility == Visibility.Visible) 
    { 
     this.Dispatcher.BeginInvoke((Action)delegate 
     { 
      Keyboard.Focus(TextBlockInput); 
     }, DispatcherPriority.Render); 
    } 
} 

我觉得现在的问题是THA焦点调用到IsVisibleChanged在事件“范围“...对?

+0

自从今天早上试图解决此问题....您保存了我的晚上:-)非常感谢! ! – Cris 2011-08-04 15:31:04

1

尝试

Keyboard.Focus(TextBlockInput); 

看到here更多细节

+0

我试过但更糟糕...与Keyboard.Focus(myTextBox)或myTextBox.Focus()似乎该文本框没有集中......看不到光标。 – 2010-06-24 13:04:47

+0

它是一个标准的TextBox?或一些第三方控制? – 2010-06-25 05:05:17

+0

我已经发布了我的解决方案...感谢您的帮助,似乎问题是焦点调用IsVisibleChange事件 – 2010-06-25 10:10:31

0

另一个可能的解决方法是代替Visibility属性使用Opacity。在这种情况下调用Focus()实际上设置焦点。