微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在没有子控件实例的情况下订阅任何冒泡的 WPF 子控件路由事件

如何解决在没有子控件实例的情况下订阅任何冒泡的 WPF 子控件路由事件

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

但我需要此控件来捕获来自任何子 Thumb.DragCompleted 的任何“冒泡”Thumb 事件。问题是,它没有任何要订阅Thumb 控件的特定实例。它只需要捕获事件并在拇指满足特定条件时采取特定操作即可。

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

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

解决方法

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?