2011-06-23 39 views
6

检测Silverlight应用程序的空闲状态的最佳方法是什么?我现在已经在网上阅读了很多文章,通常他们是为wpf /移动应用等。空闲状态检测Silverlight 4应用程序

我创建了一个DispatcherTimer,锁定屏幕5分钟后,似乎我将不得不去每个屏幕上的每个小部件(我的应用程序大约有4-5个屏幕),并添加一个mousebuttondown或mouseenter eventhandler来重置此计时器。这似乎并不高效,但只是将处理程序添加到layroot中也无济于事。

任何有帮助的建议?

谢谢

回答

5

您不需要修改每个控件。如果您在启动时添加以下代码:

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

有以下事件处理程序:

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

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

哪里idle是你在DispatcherTimerTick事件中使用变量来检查,如果事情发生与否。

当事件向上冒泡时,这应该适用于所有控件。

+0

完美运作。谢谢 – user642770

+0

@ user64270:只要您没有打开ChildWindows的时间超过您的空闲超时时间。 – AnthonyWJones

2

处理的事件不会冒泡到根控制。相反,您应该使用AddHandler方法与handledEventsToo = true