我正在创建一个C#WPF应用程序,并正在寻找一种方法来执行以下操作:如何知道鼠标在画布上点击了什么?
我有一个带有不同用户控件和一个按钮的画布。
当我在按钮上点击光标改变为手(Canvas.Cursor = Cursors.Hand)
然后,如果我点击我得到表示的控制点击的名称的消息框的控制中的一个(该名称是控件的公共属性)。
如果我点击其他地方我光标重置,我应该再次点击该按钮,然后我可以再次获得名称。
我试着玩事件和处理程序,但无法达到我想要的。
非常感谢您的帮助
我正在创建一个C#WPF应用程序,并正在寻找一种方法来执行以下操作:如何知道鼠标在画布上点击了什么?
我有一个带有不同用户控件和一个按钮的画布。
当我在按钮上点击光标改变为手(Canvas.Cursor = Cursors.Hand)
然后,如果我点击我得到表示的控制点击的名称的消息框的控制中的一个(该名称是控件的公共属性)。
如果我点击其他地方我光标重置,我应该再次点击该按钮,然后我可以再次获得名称。
我试着玩事件和处理程序,但无法达到我想要的。
非常感谢您的帮助
您可以使用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
环),以获得被点击的控制。
如果您尝试玩事件和处理程序,但无法达到您想要的效果,那么您可能没有足够长时间玩游戏了......可以显示您尝试的内容,也许我们可以帮助您解决问题。 – Crisfole