2011-06-23 66 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