2009-07-01 4 views
6

Je souhaite afficher le texte d'une info-bulle de tout contrôle dans mon application wpf dans une barre d'état, lorsqu'une info-bulle est sur le point d'être ouverte."Intercepter" l'ouverture d'une info-bulle à l'échelle

Bien sûr, je pourrais essayer de boucler récursivement tous les contrôles enfants de la fenêtre principale et définir leur événement ToolTipOpening pour toujours la même méthode. Mais y a-t-il un moyen plus facile?

Quelque chose comme un événement Application.Current.AnyToolTipOpening?

Répondre

9

Bien sûr, essayez ceci:

EventManager.RegisterClassHandler(typeof(FrameworkElement), FrameworkElement.ToolTipOpeningEvent, new ToolTipEventHandler(ToolTipHandler)); 

qui enregistre un gestionnaire pour toutes les classes qui dérivent de FrameworkElement.

Votre méthode de gestionnaire pourrait ressembler à ceci:

private void ToolTipHandler(object sender, ToolTipEventArgs e) { 
     // To stop the tooltip from appearing, mark the event as handled 
     e.Handled = true; 
     FrameworkElement source = e.Source as FrameworkElement; 
     if (source != null) { 
      MessageBox.Show(source.ToolTip.ToString()); // or whatever you like 
     } 
    } 
1

grâce, qui a travaillé. En outre, pour que le texte de la barre d'état disparaisse lorsque la souris quitte le contrôle avec l'info-bulle:

EventManager.RegisterClassHandler(typeof(FrameworkElement), 
        MouseLeaveEvent, new MouseEventHandler(ClearText)); 
Questions connexes