C# WPF应用程序中的事件冒泡

C# WPF应用程序中的事件冒泡,c#,.net,wpf,events,event-bubbling,C#,.net,Wpf,Events,Event Bubbling,我是WPF的新手。在我的WPF应用程序中,我的窗口包含一个用户定义的子控件,该用户定义的子控件再次包含另一个用户定义的子控件。现在,在最内部的子控件中,单击一个按钮,我想在所有三个控件上触发事件(即第一个子控件、第二个子控件、第三主控件和窗口) 我知道这可以通过代表和活动泡泡来实现。你能告诉我怎么做吗?解释了所有路由事件,包括如何实现和使用它们。看看这段最重要的pf代码: 在静态UIElement.MouseleftButtonPEvent上添加事件处理程序: middleInnerContro

我是WPF的新手。在我的WPF应用程序中,我的窗口包含一个用户定义的子控件,该用户定义的子控件再次包含另一个用户定义的子控件。现在,在最内部的子控件中,单击一个按钮,我想在所有三个控件上触发事件(即第一个子控件、第二个子控件、第三主控件和窗口)


我知道这可以通过代表和活动泡泡来实现。你能告诉我怎么做吗?

解释了所有路由事件,包括如何实现和使用它们。

看看这段最重要的pf代码: 在静态UIElement.MouseleftButtonPEvent上添加事件处理程序:

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 
事件处理程序:

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
    }

为什么不呢?是的,当然不是。我读得不够仔细,看不出这是一个被点击的按钮。