6

我在 XAML 中有这个矩形:

<Rectangle x:Name="MyRectangle" Height="300" Width="300"></Rectangle>

我想检查它是否与另一个矩形相交。在这个关于 SO的问题中,他们说必须使用IntersectsWith 方法。但我无法在代码隐藏中使用它。当我用 C# 编写时:

MyRectangle.IntersectsWith(

我得到标准错误:

“System.Windows.Shapes.Rectangle 不包含 'IntersectsWith' 的定义并且没有扩展方法 [...]”

我认为这是因为 XAML 中的矩形是 a System.Windows.Shapes.Rectangle,而方法是 for System.Windows.Rect?如果是这样,有没有办法将我“转换”Rectangle成一个Rect

4

3 回答 3

3

这是我最终使用的解决方案。对于我想测试的每个元素是否与其他元素相交,我创建了一个包含它的 Rect。因此,我可以使用 IntersectsWith 方法。

示例(使用矩形,但您可以使用其他图形、UserControls、...):XAML

<Canvas>
    <Rectangle x:Name="Rectangle1" Height="100" Width="100"/>
    <Rectangle x:Name="Rectangle2" Height="100" Width="100" Canvas.Left="50"/>
</Canvas>

C#

Rect rect1 = new Rect(Canvas.GetLeft(Rectangle1), Canvas.GetTop(Rectangle1), Rectangle1.Width, Rectangle1.Height);
Rect rect2 = new Rect(Canvas.GetLeft(Rectangle2), Canvas.GetTop(Rectangle2), Rectangle2.Width, Rectangle2.Height);
if(rect1.IntersectsWith(r2))
{
    // The two elements overlap
}
于 2013-07-16T22:28:47.040 回答
1

你可以使用VisualTreeHelper.HitTest来测试交叉点不要忘记设置GeometryHitTestParameters

Windows Presentation Foundation (WPF) hit testing only considers the filled area of a geometry during a hit test. If you create a point Geometry, the hit test would not intersect anything because a point has no area.

于 2013-07-14T06:26:05.430 回答
1

试试看

MyRectangle.RenderedGeometry.Bounds.IntersectsWith();
于 2013-07-14T04:21:57.303 回答