wpf 如何从父容器上注册的MouseLeftButtonUp事件中获取被点击的对象?

56lgkhnf  于 2023-08-07  发布在  其他
关注(0)|答案(3)|浏览(140)

我在画布上画了椭圆,我在画布上注册了一个MouseLeftButtonUp,我想得到椭圆被点击使用:

(Ellipse)e.Source

字符串
但是e.Source总是画布,我也试过e.OriginalSource,也用PreviewMouseLeftButtonUp做了同样的事情,但结果仍然一样。事件参数为MouseButtonEventArgs。我做错了什么?也有一种方法来检查是否有一个画布的子元素在一个特定的点。

xurqigkl

xurqigkl2#

您可能需要PreviewMouseLeftButtonUp,而不是MouseLeftButtonUp。此外,您可能需要使用Ellipse.PreviewMouseLeftButtonUp注册事件,而不是Canvas上的MouseUp事件。大概是这样的:

<Canvas ... Ellipse.PreviewMouseLeftButtonUp="MyHandler" />

字符串
正如H.B.提到的,你想使用e.OriginalSource,而不是e.Source。
编辑:误读问题,编辑更改为预览鼠标 * 左键 * 向上

kfgdxczn

kfgdxczn3#

我刚刚遇到这个问题,这是第一个弹出的答案。它在MouseLeftButtonDown上工作,但在MouseLeftButtonUp上不工作。这是因为我在MouseDown处理程序中捕获鼠标时犯了一个逻辑错误。
MouseUp事件仅在捕获元素时触发。
在我的MouseLeftButtonDown处理程序中有以下行:

((FrameworkElement) sender).CaptureMouse();

字符串
将其更改为以下内容解决了问题:

((FrameworkElement) e.OriginalSource).CaptureMouse();

相关问题