如何在WPF的画布上检查两个控件是否重叠?

12

我正在编写一个设计师,可以让用户拖动控件在屏幕上移动。 在我拖动一个控件时,检测另一个控件是否与之重叠的最佳方法是什么?

我应该只是获取 FrameworkElement 的尺寸,并继续检查其他元素的尺寸吗?

谢谢。 Eli


1
你想知道边界矩形是否重叠,还是可见区域?例如,两个椭圆可能有重叠的边界矩形,但实际上椭圆甚至可能不接触。 - Drew Noakes
2个回答

17

1
对于WinRT Metro应用程序,还有Rect.Intersect函数。如果没有交集,则返回一个空矩形;否则返回实际结果。 - Den
1
谢谢Den!我正在寻找WinRT的相关内容。 - andrecarlucci

4
您的元素的尺寸(FrameworkElement.ActualWidth FrameworkElement.ActualHeight)和位置(Canvas.Top,Canvas.Bottom,Canvas.Left,Canvas.Right)足以满足它们始终为矩形的情况。在这种情况下,您可以轻松计算两个矩形是否重叠。如果您的元素可以是更复杂的形状,则会变得棘手。我不知道是否可以在WPF中测试两个Visual实例的交集。
也许我们可以使用hittesting?通过这种方法,您至少可以测试某个几何图形是否与某个视觉相交。因此,您需要定义一个几何图形或一组点,这些几何图形或点的边界与第二个视觉的边界更多或少地匹配。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接