Пересылка событий в приложении WPF - PullRequest
4 голосов
/ 23 июня 2011

Я новичок в WPF. В моем приложении WPF у меня есть Windows, которая содержит пользовательский дочерний элемент управления, и этот пользовательский дочерний элемент управления снова содержит другой пользовательский дочерний элемент управления. Теперь из самого внутреннего дочернего элемента управления, при нажатии кнопки, я хочу запускать события на всех трех элементах управления (то есть, на первом большом дочернем элементе управления, втором дочернем элементе управления, третьем главном элементе управления и окне).

Я знаю, что это может быть достигнуто с помощью делегатов и Event Bubbling. Подскажите, пожалуйста, как?

Ответы [ 3 ]

5 голосов
/ 23 июня 2011

Самый важный фрагмент кода для этого: добавьте обработчики событий в статическом UIElement.MouseLeftButtonUpEvent:

middleInnerControl.AddHandler(UIElement.MouseLeftButtonUpEvent , new RoutedEventHandler(handleInner)); //adds the handler for a click event on the most out 
mostOuterControl.AddHandler(UIElement.MouseLeftButtonUpEvent , new RoutedEventHandler(handleMostOuter)); //adds the handler for a click event on the most out 

EventHandlers:

private void handleInner(object asd, RoutedEventArgs e)
    {
        InnerControl c = e.OriginalSource as InnerControl;
        if (c != null)
        {
            //do whatever
        }
        e.Handled = false; // do not set handle to true --> bubbles further
    }

private void handleMostOuter(object asd, RoutedEventArgs e)
    {
        InnerControl c = e.OriginalSource as InnerControl;
        if (c != null)
        {
            //do whatever
        }
        e.Handled = true; // set handled = true, it wont bubble further
    }
2 голосов
/ 23 июня 2011
1 голос
/ 23 июня 2011

Эта страница объясняет все о перенаправленных событиях, включая способы их реализации и использования.

...