¿Cómo le doy un enfoque de cuadro de texto en Silverlight?

En mi aplicación Silverlight, parece que no puedo enfocar un control TextBox. Por recomendación de varias publicaciones, configuré la propiedad IsTabStop en True y estoy usando TextBox.Focus (). Aunque el evento UserControl_Loaded se activa, el control TextBox no obtiene el foco. He incluido mi código muy simple a continuación. ¿Qué me estoy perdiendo? Gracias.

Page.xaml

       

Page.xaml.cs

 using System.Windows; using System.Windows.Controls; namespace PasswordTextboxTest { public partial class Page : UserControl { public Page() { InitializeComponent(); } private void UserControl_Loaded(object sender, RoutedEventArgs e) { RegularTextBox.Focus(); } } } 

Encontré esto en silverlight.net, y pude hacer que funcionara para mí agregando una llamada a System.Windows.Browser.HtmlPage.Plugin.Focus () antes de llamar a RegularTextBox.Focus ():

  private void UserControl_Loaded(object sender, RoutedEventArgs e) { System.Windows.Browser.HtmlPage.Plugin.Focus(); RegularTextBox.Focus(); } 
 Plugin.Focus(); 

no funcionó para mí

Vocación

  Dispatcher.BeginInvoke(() => { tbNewText.Focus();}); 

Del evento de carga trabajado.

gracias Santiago Palladino Dispatcher trabajó para mí perfectamente. Lo que estoy haciendo es:

esto.Enfoque (); luego Dispatcher.BeginInvoke (() => {tbNewText.Focus ();});

Resolví poner el constructor de control:

 this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); }; 

¿Estás seguro de que no estás realmente enfocado? Hay un error conocido en Beta 2 donde obtendrá foco y podrá escribir, pero no obtendrá el cursor o el borde. La solución consiste en llamar a UpdateLayout () en el cuadro de texto justo antes de llamar a Focus ().

Intentaría agregar un DispatcherTimer en el evento UserLoaded que ejecuta el método Focus unos pocos milisegundos después de que se haya cargado todo el control; tal vez el problema está ahí.

También necesitaba llamar

Deployment.Current.Dispatcher.BeginInvoke (() => myTextbox.Focus ());

Curiosamente, esta llamada está sucediendo dentro de un controlador de eventos cuando hago clic con el mouse en un TextBlock, contrae el TextBlock y hace que TextBox sea visible. Si no lo sigo por un dispatcher.BeginInvoke no se enfocará.

-Micro

El código para configurar el foco es correcto, ya que si agrega un botón que llama al mismo código, funciona perfectamente:

     

Así que supongo que esto tiene algo que ver con Focus () que requiere algún tipo de interacción del usuario. No pude hacer que funcione con un evento MouseMove en UserControl, pero poner un evento KeyDown para establecer el foco funciona (aunque la plantilla no se actualiza a la plantilla enfocada).

 Width="400" Height="300" Loaded="UserControl_Loaded" KeyDown="UserControl_KeyDown"> 

Me parece como un insecto….

Para aplicaciones fuera del navegador, System.Windows.Browser.HtmlPage.Plugin.Focus(); no existe

Vea mi pregunta aquí para otras ideas.

Funciona para mí en SL4 e IE7 y Firefox 3.6.12

La última “pieza” faltante que hizo que el enfoque funcionara (para mí) fue establecer la propiedad .TabIndex

  System.Windows.Browser.HtmlPage.Plugin.Focus(); txtUserName.IsTabStop = true; txtPassword.IsTabStop = true; if (txtUserName.Text.Trim().Length != 0) { txtPassword.UpdateLayout(); txtPassword.Focus(); txtPassword.TabIndex = 0; } else { txtUserName.UpdateLayout(); txtUserName.Focus(); txtUserName.TabIndex = 0; } 

Mi perfil no es lo suficientemente bueno para comentar la respuesta de @Jim BG pero lo que funcionó para mí fue agregar un controlador para el evento Loaded en el RichTextBox y dentro de ese controlador agregar

 System.Windows.Browser.HtmlPage.Plugin.Focus(); .UpdateLayout() .Focus(); 

Sin embargo, solo funcionó en IE y FF. Para que funcione en Chrome y Safari, desplácese hasta el final de este

Olvidé una cosa … No he encontrado una forma de forzar el enfoque a su aplicación Silverlight en la página de manera confiable (funcionará en algunos navegadores y no en otros).

Por lo tanto, es posible que la aplicación Silverlight en sí no tenga foco. Por lo general, engaño al usuario para que haga clic en un botón o algo similar antes de comenzar a esperar la entrada del teclado para asegurarme de que la aplicación Silverlight tiene foco.

También encontré este problema, pero surgió de un caso diferente al que ya se ha respondido aquí.

Si tiene un control BusyIndicator se muestra y oculta durante su vista, los controles no se enfocarán si tiene líneas como

 Dispatcher.BeginInvoke(() => { myControl.Focus();}); 

en el evento de carga.

En cambio, deberá llamar a esa línea de código después de que su pantalla BusyIndicator se haya configurado en falso.

Tengo una pregunta relacionada aquí , así como una solución para este escenario.

De hecho, un comportamiento molesto. Encontré una solución sencilla y directa:

(Código VB)

  Me.Focus() Me.UpdateLayout() Me.tbx_user_num.Focus() Me.tbx_user_num.UpdateLayout() 

Cada elemento aquí es esencial, según mi proyecto al menos (VB2010 SL4 OutOfBrowser).

Crédito a: http://www.dotnetspark.com/kb/1792-set-focus-to-textbox-silverlight-3.aspx

Ninguna de las respuestas anteriores funcionó para mí directamente, lo que hice es que agregué este evento en el constructor MainPage ():

 this.Loaded += new RoutedEventHandler(MainPage_Loaded); 

Y lo manejó de la siguiente manera:

  void MainPage_Loaded(object sender, RoutedEventArgs e) { System.Windows.Browser.HtmlPage.Plugin.Focus(); RegularTextBox.Focus(); } 

Mi versión de Silverlight es 4.