2011-02-01 14 views
14

tienen un elemento TextBox (MyTextBox) en un control TabItem. Tengo el código que se ve de la siguiente manera:WPF - ¿Por qué no funciona Keyboard.Focus()?

MyTextBox.Focus(); 
Keyboard.Focus(MyTextBox); 

Cuando ejecuto el código a través del depurador veo lo siguiente después de las líneas se ejecutan:

MyTextBox.IsFocused = true 
MyTextBox.IsKeyboardFocused = false 

Puede alguien decirme por qué el cuadro de texto no es recibiendo el foco del teclado? Es solo un control estándar TextBox que está habilitado.

+0

Solo para estar seguro. ¿Está el TabItem que dice este control en Visible cuando se realiza esta llamada? Creo que el control debe ser visible para que esta propiedad apueste. – Matt

+0

@Matt - Gracias. Lo comprobaré. –

+0

No puedo reproducir esto. Tanto 'IsFocused' como' IsKeyboardFocused' salen como True –

Respuesta

8

MyTextBox.IsKeyboardFocused es falso, ya que están examinándola bajo depurador y el foco del teclado está probablemente en su Visual Studio ... Prueba enfoque de depuración sin puntos de ruptura (por ejemplo Debug.Write o trazar brakepoints) para ver los valores reales de MyTextBox.IsKeyboardFocused en tiempo de ejecución.

Observe también que el método Focus() devuelve un valor booleano que indica si el foco se configuró correctamente. ¿Devuelve False en su caso? En caso afirmativo, sugeriría stepping intoFocus() método para averiguar cuál es el problema.

8

Cuando intente establecer Focus en un elemento además de los enumerados anteriormente por nuestro colega, también debe saber que WPF no permite operaciones de cruce.

En algunos casos, esta excepción no se plantea como en el caso de llamada al método de Enfoque. Lo que he hecho para solucionar este problema es llamar a todo el código que involucra el enfoque de teclados en una acción.

Esta acción se corrió dentro del despachador de control para asegurarse de que mi código no se está ejecutando desde otro hilo que el hilo de interfaz de usuario (por ejemplo, temporizador evento o un evento planteado desde otro hilo):

[UIElement].Dispatcher.BeginInvoke(
     new Action(
     delegate{ 
      /// put your Focus code here 
     } 
    ) 
); 
1

La respuesta aceptada aquí no resuelve el problema de los cuadros de texto cuales no obtener el foco, no importa lo que el depurador se lo indique. Si tiene y puede escribir en su cuadro de texto, entonces lo tiene centrado en el teclado.

me encontré con esto aquí la solución del problema (y, de hecho ganando atención, no sólo Ajustes Los valores de lo que parece que se centran en el depurador), se acerca mucho a la respuesta de Pavlov, pero con el "código de enfoque": Keyboard.Focus does not work on text box in WPF

Cuestiones relacionadas