如何知道鼠标在画布中点击了哪些控件?

时间:2011-08-10 13:46:05

标签: c# wpf canvas wpf-controls mouseevent

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

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

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

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

如果我点击其他地方,我将光标重置,然后我再次点击该按钮,然后再次获取该名称。

我尝试过玩事件和处理程序,但无法达到我想要的效果。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

您可以使用Canvas.MouseDown并使用VisualTreeHelper.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循环中)获取被点击的控件。