WPF Получить элемент по определенным координатам - PullRequest
4 голосов
/ 21 июля 2011

У меня есть метки внутри холста, мне нужно получить метку, которая пересекается с координатами X, Y?

Спасибо !!

Ответы [ 2 ]

6 голосов
/ 21 июля 2011

Просто используйте InputHitTest на холсте, передавая необходимую координату в качестве параметра. Обратите внимание, что InputHitTest доступно на каждом UIElement и не относится к холсту.

3 голосов
/ 21 июля 2011

Canvas.GetLeft (элемент), Canvas.GetTop (элемент) даст вам позицию любого элемента. Используйте ActualWidth и ActualHeight, чтобы сформировать полный прямоугольник. Вы можете перебирать детей Холста с помощью foreach.

Редактировать: CodeNaked указал, что элементы могут быть установлены с помощью SetRight или SetBottom, поэтому я изменил пример кода:

foreach (FrameworkElement nextElement in myCanvas.Children)
{
    double left = Canvas.GetLeft(nextElement);
    double top = Canvas.GetTop(nextElement);
    double right = Canvas.GetRight(nextElement);
    double bottom = Canvas.GetBottom(nextElement);
    if (double.IsNaN(left))
    {
        if (double.IsNaN(right) == false)
            left = right - nextElement.ActualWidth;
        else
            continue;
    }
    if (double.IsNaN(top))
    {
        if (double.IsNaN(bottom) == false)
            top = bottom - nextElement.ActualHeight;
        else
            continue;
    }
    Rect eleRect = new Rect(left, top, nextElement.ActualWidth, nextElement.ActualHeight);
    if (myXY.X >= eleRect.X && myXY.Y >= eleRect.Y && myXY.X <= eleRect.Right && myXY.Y <= eleRect.Bottom)
    {
        // Add to intersects list
    }
}
...