如何知道鼠标在画布中单击了什么控件

本文关键字:单击 什么 控件 布中 何知道 鼠标 | 更新日期: 2023-09-27 18:04:57

我正在创建一个C#WPF应用程序,并寻找一种方法来完成以下操作:

我有一个画布,里面有不同的用户控件和一个按钮。

当我点击按钮时,光标变为一只手(Canvas.cursor=Cursors.hand(

然后,如果我单击其中一个控件,我会得到一个消息框,显示单击的控件的名称(该名称是控件的公共属性(。

如果我点击其他地方,光标会重置,我应该再次点击按钮,然后才能再次获得名称。

我试着玩事件和处理程序,但没能达到我想要的效果。

非常感谢您对的帮助

如何知道鼠标在画布中单击了什么控件

您可以使用Canvas.MouseDownVisualTreeHelper.HitTest()以及鼠标按下事件参数的GetPosition()来获取单击的元素。

<Canvas Name="myCanvas" MouseDown="MouseDownHandler" />
public void MouseDownHandler(object sender, MouseButtonEventArgs e)
{
    HitTestResult target = VisualTreeHelper.HitTest(myCanvas, e.GetPosition(myCanvas));
    while(!(target is Control) && (target != null))
    {
        target = VisualTreeHelper.GetParent(target);
    }
    // now if target is not null, it's the control that was clicked...
}

然后,您可以使用VisualTreeHelper.GetParent()(在while循环中(来获取所单击的控件。