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

标签 c# .net wpf events event-bubbling

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

我知道这可以通过委托(delegate)和事件冒泡来实现。你能告诉我怎么做吗?

最佳答案

最重要的 pf 代码: 在静态 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 

事件处理程序:

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
    }

关于c# - WPF 应用程序中的事件冒泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6452611/

相关文章:

c# - 为什么此 WCF 服务一次只能处理一个请求?

c# - 我无法截屏

c# - Json.NET 保留 native 类型

c# - SQL Server 的输出参数未打印到 Web 表单

c# - WPF 数据网格 : How to stay on the same row after pressing Enter?

c# - 为什么 String.Clone() 返回原始字符串而不是它的副本?

c# - 如何在 C# (.NET) 中将 DateTimeKind.Unspecified 类型的 DateTime 转换为 DateTime.Kind.Utc

.net - 尝试从 native 应用程序并排访问 .NET 程序集时出现 OLE 错误 80131522

c# - MVVM/WPF - 当用户在文本框中输入时总是显示组合框下拉列表

wpf - 防止 ControlTemplate 中的控件继承全局样式 (WPF)