这就是我与之合作的情况:
我想要实现的是悬停事件是通过悬停元素处理的,而其他鼠标事件则转发到底层堆栈面板的子元素。这个问题是这些子元素从其他地方添加到堆栈面板中,并且可能有自己的子元素。
经过一些研究,我发现了这些可能的方法:
InputHitTest
方法识别命中元素,并在其上使用RaiseEvent
来触发事件处理程序。这个问题是InputHitTest
方法只返回UI树中的叶子。我可以尝试向上手动鼓泡事件,但我觉得这很脏,试图先找到另一个解决方案。将事件从堆栈面板向下隧道化到命中叶元素也是如此。MouseButtonEventArgs newArgs = new MouseButtonEventArgs(eventArgs.MouseDevice, eventArgs.Timestamp, eventArgs.ChangedButton);
newArgs.RoutedEvent = Mouse.PreviewMouseDownEvent;
hitElement.RaiseEvent(newArgs);
但它并没有像预期的那样发挥作用。难道我做错了什么?这实际上是可能的吗?
IInvokeProvider
在堆栈面板上模拟事件的触发器。我没有详细看过这个,因为我发现它有点脏。所以,我真正想要的是什么,所以,我应该怎么做?
答案 0 :(得分:0)
我通过以下方式解决了我的问题:
xs
并手动评估鼠标是否在矩形边框内真是可耻的简单......