2009-07-01 4 views
6

Я хочу показать текст всплывающей подсказки любого элемента управления в моем приложении wpf внутри строки состояния, когда всплывающая подсказка вот-вот откроется.«Перехватить» открытие любой всплывающей подсказки по всей стране

Конечно, я мог бы попытаться циклически перебрать все дочерние элементы управления в главном окне, а установить их событие ToolTipOpening всегда одинаково. Но есть ли более простой способ?

Что-то вроде события Application.Current.AnyToolTipOpening?

ответ

9

Конечно, попробуйте следующее:

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

, который регистрирует обработчик для всех классов, производных от FrameworkElement.

Ваш метод обработчика может выглядеть следующим образом:

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

спасибо, что работал. Кроме того, чтобы текст в строке состояния исчез, когда мышь покидает элемент управления с помощью всплывающей подсказки:

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