Я использую метод VisualTreeHelper FindElementsInHostCoordinates для нахождения ListBoxItem в данном местоположении X и Y. Однако значение X и Y, кажется, связано с точками на всей странице не только ListBox, я интересуюсь (даже при том, что я являюсь передающим в том элементе в параметр поддерева метода). Ниже, это относится к пользовательскому элементу управления, который происходит из 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?
Спасибо.
Я сам понял это (вау). Я определил верхнее и левое значения для своего элемента управления, а затем добавил внутренние значения X и Y в свой элемент управления:
GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual as UIElement);
Point offset = gt.Transform(new Point(0, 0));
double controlTop = offset.Y + Y;
double controlLeft = offset.X + X;
Итак, я могу передать значения X и Y относительно моего элемента управления, но этот код преобразует их в глобальные координаты .
У меня работает, привет !, нет значка перекати-поле по этому вопросу. :)