2010-06-24 18 views
16

Tengo un control de usuario cargado dentro de un lienzo; este control de usuario predeterminado tiene visibilidad contraída. Cuando se enfoca un cuadro de texto específico de mi ventana, el control de usuario se hace visible.Enfoque en TextBox cuando UserControl cambie Visibilidad

Cuando el control de usuario se vuelve visible, quiero establecer el foco en otro cuadro de texto dentro de usercontrol.

trato de hacer eso:

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

Parece trabajo, pero hay un problema: el cuadro de texto parece centrado pero el cursor en el cuadro de texto no parpadean y no puede escribir caracteres para la entrada.

Me gustaría que después del enfoque el cuadro de texto esté listo para la entrada. ¿Como lo puedo hacer?

Respuesta

31

Bueno, resuelve de esta manera:

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

creo que el problema era tha llamada de atención en caso IsVisibleChanged "ámbito "...¿derecho?

+0

Estaba tratando de resolver este problema desde esta mañana ... me salvó la noche :-) ¡Muchas gracias! ! – Cris

1

tratar

Keyboard.Focus(TextBlockInput); 

ver here para más detalles

+0

Lo intenté pero peor ... con Keyboard.Focus (myTextBox) o myTextBox.Focus() parece que el cuadro de texto no está enfocado ... no veo el cursor. –

+0

¿Es un TextBox estándar? o algún control de tercera parte? –

+0

He publicado mi solución ... gracias por su ayuda, parece que el problema fue la llamada de atención al evento IsVisibleChange –

0

Otra solución posible es en lugar de Visibility uso de la propiedad Opacity. En este caso, llamando al Focus() realmente establece el foco.

Cuestiones relacionadas