我正在使用 VisualTreeHelper 方法 FindElementsInHostCoordinates 在给定的 X 和 Y 位置查找 ListBoxItem。但是,X 和 Y 值似乎与整个页面中的点有关,而不仅仅是我感兴趣的 ListBox(即使我将该元素传递到该方法的子树参数中)。下面,this 指的是从 ListBox 派生的自定义控件。
foreach (UIElement element in VisualTreeHelper.FindElementsInHostCoordinates(new Point(X, Y), this))
{
if (element is ListBoxItem)
{
int index = this.ItemContainerGenerator.IndexFromContainer(element);
break;
}
}
因此,(0,0) 将相对于整个插件的左上角而不是 ListBox 的左上角。我是否需要自己在这里做一些数学工作(在代码中)将页面坐标转换为 ListBox 坐标,或者是否有其他方法可以进行命中测试以判断给定的 X 和 Y 点是否在 ListBoxItem 上方?
谢谢。