【问题标题】:Subscribe to any bubbled-up WPF child control routed event without an instance of a child control订阅任何没有子控件实例的冒泡 WPF 子控件路由事件
【发布时间】:2021-01-26 11:37:35
【问题描述】:

我有一个 WPF 自定义控件,其中包含一个显示多个子对象的画布和(可能)ItemsControls。我不知道会有多少子对象,也不知道它们的嵌套程度。

但是我需要这个控件来捕获来自任何孩子Thumb 的任何“冒泡”Thumb.DragCompleted 事件。问题是,它没有要订阅的Thumb 控件的任何特定实例。它只需要不顾一切地捕捉事件并在拇指满足特定条件时采取特定行动。

是否可以在代码隐藏中订阅所有此类子事件?我能看到的最接近的似乎是EventManager.RegisterClassHandler,但我不希望应用程序中的每个拇指都有DragCompleted,而只是我的子对象的拇指。我一定是遗漏了一些明显的功能,是吗?

我发现的示例似乎期望您实际上有一个Thumb 控制对象实例。

【问题讨论】:

    标签: wpf routed-events


    【解决方案1】:

    您可以像这样在 XAML 中订阅冒泡型路由事件:

    <Grid Name="ParentGrid" Thumb.DragCompleted="DragCompletedEventHandler">
        <!--Some children possibly containing a Thumb-->
    </Grid>
    

    在上面的例子中,任何在ParentGrid 中引发DragCompleted 事件的Thumb 最终都会调用DragCompletedEventHandler(假设树中更深的另一个处理程序不会首先被调用并将RoutedEventArgs.Handled 设置为@987654327 @,这将停止传播)。

    你可以用这样的代码完成同样的事情:

    ParentGrid.AddHandler(Thumb.DragCompletedEvent, new DragCompletedEventHandler(DragCompletedEventHandler));
    

    其中ParentGrid 是您要收听的级别的父控件。

    【讨论】:

      猜你喜欢
      • 2011-08-05
      • 1970-01-01
      • 2012-04-25
      • 2021-11-30
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      相关资源
      最近更新 更多