2009-09-14 93 views
2

我有一個受鍵盤控制的Silverlight遊戲,我希望它在鍵盤焦點丟失時進入暫停狀態(例如,用戶單擊託管網頁的另一部分或移到另一個瀏覽器標籤)。在Silverlight應用程序中檢測鍵盤焦點丟失

我以前在Silverlight 1.1中通過訂閱我的RootVisual UserControl上的LostFocus事件來做到這一點,但在Silverlight的最後兩個版本中,我發現這個事件在單擊我的應用程序中的一個按鈕後不久就會意外觸發在Silverlight 2中它發射一次,在Silverlight 3中兩次!)。

在託管頁面或Silverlight中是否有一種方法可以更可靠地檢測焦點丟失?

回答

2

我終於找到了解決這個問題的辦法。 LostFocus事件上的RoutedEventArgs屬性具有一個OriginalSource屬性,該屬性允許我忽略來自RootVisual子項的任何LostFocus事件。

void Page_LostFocus(object sender, RoutedEventArgs e) 
    { 
     if (e.OriginalSource == this) 
     { 
      Pause(); 
     } 
    } 
+0

您確定這是否行?根據我的經驗,當孩子注意力集中並且焦點轉移到父母和孩子之外時,您永遠不會通過OriginalSource ==父母獲得LostFocus。 我不打擾LostFocus的收聽。我在GotFocus中做所有事情。 – 2009-09-14 23:38:43

+0

我想它有可能存在一些不可靠的場景,但對於我的遊戲來說它工作正常。對於Silverlight來說,這將是一個很好的更新,讓您可以在應用程序級別訂閱全局事件。 – 2009-09-20 12:50:50