2012-03-30 12 views
6

Tengo una pantalla de búsqueda en mi aplicación WPF. La pantalla se implementa como UserControl en un TabItem de un TabControl. Cuando el usuario cambia a la pestaña Buscar, quiero que el foco vaya a un campo en particular.¿Cómo puedo saber a dónde va mi enfoque en mi aplicación WPF?

Así que agregué un controlador de eventos cargado a la etiqueta UserControl en el Xaml y llamé al método de enfoque del control Quiero tener el foco inicial en el controlador de eventos Loaded. Esto funcionó de maravilla hasta que actualicé la biblioteca de control de Telerik que estoy usando hoy. Ahora, cuando cambio a la pestaña Buscar, el foco NO está en el campo que quiero tener, pero no puedo decir qué control tiene el foco.

El campo que quiero enfocar ya tiene GotFocus & controladores de eventos LostFocus por otros motivos. Recuerdo que en Win Forms, los argumentos del manejador de eventos LostFocus te dicen qué control va a obtener el foco. Así que puse un punto de interrupción en mi controlador LostFocus & descubrí que los argumentos para el controlador de eventos LostFocus en WPF no incluyen esa información.

¿Cómo puedo saber a dónde va el enfoque sin poner los manejadores GotFocus en cada control en mi UserControl?

, Tony

Respuesta

5

Puede intentar colocar su punto de interrupción en el evento adjunto LostKeyboardFocus en lugar del evento LostFocus. Utiliza la clase KeyboardFocusChangedEventArgs que tiene propiedades que muestran qué elemento tenía foco y hacia dónde se dirige.

private void textBox1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    textBox1.Text = ((FrameworkElement)e.NewFocus).Name ; 
} 
+0

Gracias, esto es lo que necesitaba. No pude decir fácilmente dónde iba el foco porque fue a una casilla de verificación que tengo en el formulario, y esto muestra el foco al poner un cuadro punteado en el interior de la casilla de verificación. Es minúsculo y difícil de ver a menos que realmente lo estés buscando. Al menos, está en mi aplicación. –

+0

@Tony Me alegra que haya ayudado. –

8

intentar presionar Tab clave y ver si ayuda a encontrar el control de enfoque.

También puede utilizar Snoop como se sugiere en este Q/A: Any tips on debugging focus issues in WPF?

Para empezar, Snoop muestra el elemento de centrado y la corriente FocusScope en la barra de estado.

Se puede conseguir que le muestre todos los eventos GotFocus y LostFocus:

1. Run your app. 
2. Run Snoop. 
3. Choose your app in the dropdown. 
4. Click the binoculars ("Snoop") button. 
5. On the right pane, click the Events tab. 
6. Click to bring down the dropdown. 
7. Scroll down to the Keyboard section and check GotKeyboardFocus, LostKeyboardFocus, and optionally the PreviewXXX events. 
8. Now do what you need to do to manipulate focus and watch the Snoop window. 

mismo modo se puede realizar un seguimiento de los eventos de FocusManager la misma manera.

+0

Gracias, lo intentaré por la mañana. –

Cuestiones relacionadas