2011-02-10 3 views
2

J'essaie de déboguer certains problèmes avec des tabulations manquantes/supplémentaires. Y a-t-il une sorte d'événement global auquel je peux attacher pour que je puisse enregistrer quel élément s'est focalisé chaque fois que le focus change? Merci! Voici ce que je fais en ce moment, ce qui fonctionne assez bien, mais je suis toujours curieux de savoir s'il y a une autre façon:Obtention d'une notification lorsque le focus change dans Silverlight 4?

DispatcherTimer timer = new DispatcherTimer(); 
timer.Interval = TimeSpan.FromSeconds(0.2); 
timer.Tick += onTick; 
timer.Start(); 

// ... 

private object LastFocusedElement; 
private void onTick(object sender, EventArgs e) 
{ 
    object elem = FocusManager.GetFocusedElement(); 
    if(LastFocusedElement != elem) 
    { 
     LastFocusedElement = elem; 
     System.Diagnostics.Debug.WriteLine("+++FOCUS+++ Focus changed to: " + elem + (elem == null ? "" : " (" + elem.GetType().Name + ")")); 
    } 
} 

Répondre

2

Vous devriez être en mesure de souscrire à l'événement GotFocus pour le « top-plus " récipient. Je ne vois pas de drapeau MANIPULÉE RoutedEventArgs afin autant que je puisse le dire, il faut toujours l'atteindre

<UserControl ... 
      GotFocus="UserControl_GotFocus"> 
    <!-- Lots of Nested Controls --> 
</UserControl> 

private void UserControl_GotFocus(object sender, RoutedEventArgs e) 
{ 
    object elem = e.OriginalSource; 
    System.Diagnostics.Debug.WriteLine("+++FOCUS+++ Focus changed to: " + elem + (elem == null ? "" : " (" + elem.GetType().Name + ")")); 
} 
-1

Vous devriez être en mesure d'utiliser la fonction AddHandler pour brancher un événement mise au point avec votre contrôle.

Et regardez la signature AddHandler, même si un événement a été traité, vous devriez également pouvoir recevoir une notification.

+0

Il n'existe aucun moyen d'utiliser la fonction AddHandler. Vous pouvez this.GotFocus + = .... mais cela n'a pas semblé fonctionner pour moi à moins que j'aie ajouté le gestionnaire dans le xaml. AddHander est vraiment utile pour les événements de souris car vous pouvez attraper des événements déjà gérés! –

Questions connexes