【发布时间】:2014-02-02 19:21:35
【问题描述】:
我在 Canvas 中有标签,我需要获取与坐标 X、Y 相交的标签吗?
谢谢!!
【问题讨论】:
-
相对于画布的坐标?窗户?屏幕?相对于左上角?左下方?其他?
标签: c# wpf coordinate-systems
我在 Canvas 中有标签,我需要获取与坐标 X、Y 相交的标签吗?
谢谢!!
【问题讨论】:
标签: c# wpf coordinate-systems
只需在画布上使用InputHitTest,将所需的坐标作为参数传递。请注意,InputHitTest 在每个 UIElement 上都可用,并且不特定于画布。
【讨论】:
Canvas.GetLeft(element), Canvas.GetTop(element) 将为您提供任何元素的位置。使用 ActualWidth 和 ActualHeight 形成完整的矩形。您可以使用 foreach 遍历 Canvas 的子项。
编辑: 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
}
}