gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:22 27 4
gpt4 key购买 nike

这是我正在处理的情况:

situation

我想要实现的是悬停事件通过悬停元素处理,而其他鼠标事件则转发到底层堆栈面板的子元素。这样做的问题是这些子元素是从其他地方添加到堆栈面板的,并且可能有自己的子元素。

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

  1. 使用InputHitTest堆栈面板上的方法来识别命中元素,并使用 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 事件参数上使用 GetPosition 并手动评估鼠标是否位于矩形边框内

真的很简单...

关于c# - 在 WPF 中,如何在外部提供的元素上触发鼠标事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37238365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com