我的应用程序中的画布上放置了一系列控件。我在这个画布上以编程方式生成一个点。我希望检测画布的一个孩子是否与这一点相交。
我希望命中测试API可用(wpf曾经有一个接口可用),但看起来所有交互似乎都是通过输入和触摸事件,这使得我自己很难执行查询。 我很可能在搜索中错过了这个功能,有人知道如何实现这样的功能吗?
答案 0 :(得分:6)
您可以使用Windows.UI.Xaml.Media.VisualTreeHelper。FindElementsInHostCoordinates查找与特定坐标相交的UIElements。
要找到相对于Canvas的点,您需要将Canvas的坐标转换为应用程序窗口的坐标,您可以使用UIElement进行转换。TransformToVisual。这将考虑缩放和翻译
// myCanvas is the canvas you're hittesting on
// generatedPoint is the Point you're trying to hittest
// page is the app window's root visual
// Get a transform from the Canvas' coordinates to the Page
GeneralTransform gt = myCanvas.TransformToVisual(page);
// Use that to convert the generated Point into the page's coords
Point pagePoint = gt.TransformPoint(generatedPoint);
// and get the elements in the canvas at that point
var elements = VisualTreeHelper.FindElementsInHostCoordinates(pagePoint,myCanvas);
// elements contains the UIElements at generatedPoint (including myCanvas)
FindElementsInHostCoordinates文档更详细地介绍了热门测试场景。