2012-06-28 15 views
5

Estoy trabajando en un proyecto WPF, y estoy intentando activar un evento cada vez que algunos userControls se activen o se inactiven.Cómo saber si el UserControl está activo, aparte de usar IsFocused

Estos controles de usuario tienen muchos otros controles dentro de ellos.

Me trataron de lograr esto usando los eventos Usercontrol GotFocus y LostFocus, pero estos acontecimientos no están funcionando de la manera que necesito ya que el control de usuario pierde el foco cuando trabajo con controles dentro de ella.

lo tanto, mi pregunta es: ¿Existe una manera de MANTENER un control de usuario como Active mientras el usuario trabaja con controles en el interior de la misma, y, cuando el usuario se desplaza a otro Usercontrol esta primera uno obtiene Inactive ???

Gracias de antemano.

+2

¿Ha probado [UIElement.IsKeyboardFocusWithinChanged Event] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.iskeyboardfocuswithinchanged)? – LPL

+0

@LPL, acabo de probarlo, pero cuando se muestra el control del usuario, el evento aumenta infinitamente – Dante

+2

@Dante ¿Estás utilizando un punto de interrupción? Un punto de interrupción hará que el 'UserControl' pierda el foco, y al continuar lo hará volver a enfocar, lo que causa el ciclo infinito. – Rachel

Respuesta

2

Pude resolver mi problema gracias a los comentarios de @LPL y @Rachel.

Tuve que usar el evento UIElement.IsKeyboardFocusWithinChanged y funcionó perfectamente.

Al principio tuve un problema que era que el método de devolución de llamada se había planteado hasta el infinito, pero el problema real era que yo estaba mostrando un MessageBox cada vez que el evento IsKeyboardFocusWithinChanged eleva, así, esto hizo que la propiedad IsKeyboardFocusWithin cambió y se creado un bucle infinito Pero gracias al consejo de Rachel, pude descubrir cómo resolverlo.

0

No estoy seguro, pero una solución puede estar en el enfoque perdido de la comprobación de control si el control que obtuvo el foco es hijo de su control si es escribir simplemente devolver si no es así simplemente escriba la lógica que desee perdió el foco de su control. Espero que esto ayude

Cuestiones relacionadas