如何解决在没有子控件实例的情况下订阅任何冒泡的 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 举报,一经查实,本站将立刻删除。