2009-09-14 7 views
2

J'ai un jeu Silverlight contrôlé par le clavier, et je veux qu'il passe en pause lorsqu'il perd le focus clavier (par exemple, l'utilisateur clique sur une autre partie de la page web d'hébergement, ou se déplace vers un autre onglet du navigateur). J'avais l'habitude de faire cela dans Silverlight 1.1 en m'abonnant à l'événement LostFocus sur mon RootVisual UserControl, mais dans les deux dernières versions de Silverlight, j'ai trouvé cet événement semble se déclencher soudainement après avoir cliqué sur un bouton dans mon application (dans Silverlight 2, il a tiré une fois, dans Silverlight 3 deux fois!).Détecter la perte de focus du clavier dans une application Silverlight

Existe-t-il un javascript sur la page d'hébergement ou dans Silverlight pour détecter plus facilement la perte de focus?

Répondre

2

J'ai finalement trouvé une solution à ce problème. La propriété RoutedEventArgs de l'événement LostFocus possède une propriété OriginalSource qui me permet d'ignorer tous les événements LostFocus provenant des enfants de RootVisual.

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

Etes-vous sûr que cela fonctionne? Dans mon expérience, quand un enfant a le focus et que l'accent est transféré en dehors du parent et de l'enfant, vous n'obtenez jamais un LostFocus avec OriginalSource == parent. Je ne me soucie pas d'écouter LostFocus. Je fais tout dans GotFocus. –

+0

Je suppose qu'il est possible qu'il existe des scénarios dans lesquels ce n'est pas fiable, mais pour mon jeu cela fonctionne bien. Ce serait une bonne mise à jour de Silverlight pour avoir un événement global auquel vous pouvez vous abonner au niveau de l'application. –

Questions connexes