2011-06-23 9 views
6

¿Cuál es la mejor forma de detectar el estado inactivo para una aplicación Silverlight? He leído bastantes artículos en la red por ahora y generalmente son para wpf/aplicaciones móviles, etc.detección de estado inactivo Silverlight 4 aplicación

He creado un DispatcherTimer que bloquea la pantalla después de 5 minutos y parece que tendré que ir a cada widget en cada pantalla (mi aplicación tiene alrededor de 4-5 pantallas) y agrega un mousebuttondown o mouseenter eventhandler para reiniciar este temporizador. Esto no parece ser eficiente, pero simplemente agregar el controlador a layroot tampoco ayuda.

¿Alguna sugerencia útil?

Gracias

Respuesta

5

No necesita modificar todos los controles. Si se agrega el siguiente código al inicio:

Application.Current.RootVisual.MouseMove += new MouseEventHandler(RootVisual_MouseMove); 
Application.Current.RootVisual.KeyDown += new KeyEventHandler(RootVisual_KeyDown); 

con los siguientes controladores de eventos:

private void RootVisual_KeyDown(object sender, KeyEventArgs e) 
{ 
    idle = false; 
} 

private void RootVisual_MouseMove(object sender, MouseEventArgs e) 
{ 
    idle = false; 
} 

Dónde idle es la variable que utiliza en su caso DispatcherTimerTick para comprobar si las cosas están sucediendo o no.

A medida que los eventos aparecen en el árbol esto debería funcionar para todos sus controles.

+0

que funcionó a la perfección. Gracias – user642770

+0

@ user64270: Siempre y cuando no tenga ChildWindows abierto durante más tiempo que su tiempo de espera inactivo. – AnthonyWJones

2

Los eventos controlados no aparecerán hasta el control de raíz. En su lugar, debe utilizar el método AddHandler con handledEventsToo = true.

Cuestiones relacionadas