繁体   English   中英

在 WPF 中拖放重叠的 UI 对象时如何停止事件传播

[英]How to stop event propagation when dragging and dropping overlapping UI objects in WPF

我有一个用例将项目拖到可能有多个 UI 层的区域上。

用例 1:将节点从 treeview 拖放到工作区区域(放置目标)。 在该工作区中创建一个图表。

用例 2:将节点从 treeview 拖放到位于原始工作区上方的图表上。 额外的数据被添加到图表中。

我的实现的问题是,当我执行用例 2 时,会调用工作区(网格)和图表的放置事件。 不仅仅是可见的。

其他人如何实施此方案?

要停止路由事件传播,请在 drop 事件处理程序中设置 e.Handled = true。

我不会将您的案例称为“多层”。 相反,它是视觉对象的正常层次结构。 对于“多层”,我的意思是,例如,几个兄弟 canvas 的下降。

无论如何,假设在托管的放置动作中有一个独特的点,我会收听放置事件(冒泡)。 在事件处理程序中,有一个“ OriginalSource ”参数,指示所涉及的第一个可视 object。 此时,您可以向上扫描可视化树( VisualTreeHelper ),搜索“图表”元素:如果找到,则表示该下拉菜单位于图表上,否则位于空白工作区。

希望能帮助到你。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM