2013-07-14 47 views
4

定義我在XAML有這個矩形的矩形:如何使用IntersectsWith方法在XAML

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

我要檢查它是否與另一個矩形相交。在this question on SO,他們說,必須使用IntersectsWith method。 但我無法在代碼隱藏中使用它。當我寫在C#:

MyRectangle.IntersectsWith(

我得到的標準誤差:

"System.Windows.Shapes.Rectangle does not contain a definition for 'IntersectsWith' and no extension method [...]"

我認爲這是因爲在XAML的矩形爲System.Windows.Shapes.Rectangle,方法是System.Windows.Rect?如果是這樣,有沒有辦法將我的Rectangle「轉換」爲Rect

回答

2

這是我最後使用的解決方案。 對於我想測試的每個元素是否與其他元素相交,我創建一個包含它的Rect。因此,我可以使用IntersectsWith方法。

例(有矩形,但你可以與其他的數字,用戶控件做到這一點,...): 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

試試吧

MyRectangle.RenderedGeometry.Bounds.IntersectsWith(); 
+0

嗨!謝謝你的回覆。我嘗試了您的建議,但無法完成工作。我在畫布上重疊了兩個矩形,但是當我寫入: if(Rect1.RenderedGeometry.Bounds.IntersectsWith(Rect2.RenderedGeometry.Bounds))時,條件不是「true」。 –

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.

+0

嗨!謝謝你的幫助。我幾乎能夠找到一個可行的解決方案,特別是使用GeometryHitTestParameters文檔提供的示例,但同時我發現了另一個解決方案,使我更容易編寫和理解:) –

+1

@MichaëlPollawelcome :),沒有單一的權利解決方案,如果IntersectsWith解決了問題,那麼你在正確的道路上:)你可以接受你自己的答案;)沒有難過的感覺 – makc