繁体   English   中英

在WPF中,如何在外部提供的元素上触发鼠标事件?

[英]In WPF, how can I trigger mouse events on externally provided elements?

我正在处理的情况是:

情况

我要实现的是,悬停事件是通过hover元素处理的,而其他鼠标事件将转发到基础堆栈面板的子元素。 问题是这些子元素是从其他位置添加到堆栈面板的,并且可能具有自己的子元素。

经过研究,我确定了这些可能的方法:

  1. 使用堆栈面板上的InputHitTest方法来识别hit元素,并在其上使用RaiseEvent触发事件处理程序。 问题在于InputHitTest方法仅返回UI树中的叶子。 我可以尝试手动将事件冒泡,但是我发现这很脏,可以尝试首先找到另一个解决方案。 将事件从堆栈面板向下挖掘到命中叶子元素的过程也是如此。
  2. 在堆栈面板上引发一个预览事件,该事件“自然地”传送到子控件。 我尝试了这个:
MouseButtonEventArgs newArgs = new MouseButtonEventArgs(eventArgs.MouseDevice, eventArgs.Timestamp, eventArgs.ChangedButton);
newArgs.RoutedEvent = Mouse.PreviewMouseDownEvent;
hitElement.RaiseEvent(newArgs);

但是它没有按预期工作。 难道我做错了什么? 这实际上可行吗?

  1. 使用IInvokeProvider在堆栈面板上模拟事件的触发。 我没有详细研究它,因为我也发现它有点脏。

那么,我真正想要的是什么,那么,我应该怎么做呢?

我通过执行以下操作解决了我的问题:

  • 删除悬停元素
  • 在堆栈面板上监听PreviewMouseMove和MouseLeave事件
  • 在PreviewMouseMove eventArgs上使用GetPosition并手动评估鼠标是否在矩形边界内

真的很可耻...

暂无
暂无

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

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