2010-06-24 6 views
16

Ich habe ein usercontrol in einem Canvas geladen; Diese usercontrol on default hat die Sichtbarkeit reduziert. Wenn ein bestimmtes Textfeld meines Fensters fokussiert ist, wird die Benutzersteuerung sichtbar.Fokus auf TextBox, wenn UserControl die Sichtbarkeit ändert

Wenn die Benutzersteuerung sichtbar wird, möchte ich den Fokus auf ein anderes Textfeld in usercontrol setzen.

Ich versuche, das zu tun:

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

Es scheint, Arbeit, aber es gibt ein Problem: die Textbox konzentriert scheint aber die Cursor in Textfeld nicht blinken und ich kann nicht Zeichen für die Eingabe eingeben.

Ich würde, dass nach dem Fokus der Textkasten ist bereit für die Eingabe. Wie kann ich?

Antwort

31

Nun, ich auf diese Weise lösen:

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

Ich denke, dass das Problem tha Fokus Anruf in IsVisibleChanged Ereignis „war Umfang "...Recht?

+0

versuchte, dieses Problem seit heute Morgen zu lösen .... Sie gespeichert meinen Abend :-) Vielen Dank! ! – Cris

1

versuchen

Keyboard.Focus(TextBlockInput); 

siehe here für weitere Details

+0

Ich versuchte es aber schlimmer ... mit Keyboard.Focus (myTextBox) oder myTextBox.Focus() scheint, dass Textbox nicht fokussiert ist ... den Cursor nicht sehen. –

+0

ist es eine Standard TextBox? oder irgendeine dritte Teilkontrolle? –

+0

Ich habe meine Lösung gepostet ... danke für Hilfe, scheint, dass das Problem war der Fokus Aufruf in IsVisibleChange Ereignis –

0

Eine andere mögliche Problemumgehung ist anstelle von Visibility Eigenschaft Verwendung Opacity. In diesem Fall wird beim Aufruf von Focus() der Fokus gesetzt.

Verwandte Themen