2009-07-01 7 views
6

Quiero mostrar el texto de una información sobre herramientas de cualquier control en mi aplicación wpf dentro de una barra de estado, cuando una información sobre herramientas está a punto de abrirse."Interceptar" la apertura de cualquier tooltip en toda la aplicación

Por supuesto, podría intentar hacer un bucle recursivo a través de todos los controles secundarios de la ventana principal y configurar su evento ToolTipOpening siempre con el mismo método. Pero, ¿hay una manera más fácil?

Algo así como un evento Application.Current.AnyToolTipOpening?

Respuesta

9

Claro, intente esto:

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

que registra un controlador para todas las clases que se derivan de FrameworkElement.

Su método de controlador podría tener este aspecto:

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

gracias, que trabajaron. Además, para hacer que el texto de la barra de estado desaparezca cuando el mouse sale del control con la información sobre herramientas:

EventManager.RegisterClassHandler(typeof(FrameworkElement), 
        MouseLeaveEvent, new MouseEventHandler(ClearText)); 
Cuestiones relacionadas