FindElementsInHostCoordinates относительно пространства управления, а не всей страницы - PullRequest
5 голосов
/ 04 февраля 2010

Я использую метод VisualTreeHelper FindElementsInHostCoordinates, чтобы найти ListBoxItem в заданном местоположении X и Y. Однако значения X и Y, по-видимому, связаны с точками на всей странице, а не только с интересующим меня ListBox (хотя я передаю этот элемент в параметр subtree метода). Ниже это относится к пользовательскому элементу управления, производному от 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? *

Спасибо.

1 Ответ

9 голосов
/ 04 февраля 2010

Я понял это сам (вау). Я определил верхнее и левое значения для своего элемента управления, а затем добавил внутренние значения 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 относительно моего элемента управления, но этот код преобразует его в глобальные координаты.

Работает на меня, и эй! :)

...