WPF在特定坐标处获取元素

时间:2011-07-21 19:21:18

标签: c# wpf coordinate-systems

我在画布中有标签,我需要得到与坐标X,Y相交的标签?

谢谢!

2 个答案:

答案 0 :(得分:6)

只需在画布上使用InputHitTest,将所需的坐标作为参数传递。请注意,每个InputHitTest都可以使用UIElement,而不是特定于画布。

答案 1 :(得分:3)

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
    }
}