如何将IntersectsWith方法与XAML中定义的矩形一起使用

时间:2013-07-14 00:10:14

标签: wpf xaml hittest rectangles

我在XAML中有这个矩形:

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

我想检查它是否与另一个矩形相交。在this question on SO中,他们说必须使用IntersectsWith method。 但是我无法在代码隐藏中使用它。当我用C#编写时:

MyRectangle.IntersectsWith(

我收到了标准错误:

  

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

我认为那是因为XAML中的矩形是System.Windows.Shapes.Rectangle,方法适用于System.Windows.Rect?如果是这样,有没有办法将我的Rectangle“转换”为Rect

3 个答案:

答案 0 :(得分:2)

这是我最终使用的解决方案。 对于我要测试的每个元素,如果它与其他元素相交,我创建一个包含它的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
}

答案 1 :(得分:1)

试试吧

MyRectangle.RenderedGeometry.Bounds.IntersectsWith();

答案 2 :(得分: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.