2011-09-23 63 views
3

我有一個WPF畫布和很多形狀(StreamGeometry/Path)添加到它。我定義了ScaleTransform以放大特定區域。WPF畫布中的可見元素

我已經放大到畫布中的任意空間,並且形狀被縮放。現在,是否有可能獲得Canvas可見區域中的Shapes。

感謝您的指點。

回答

2

這應該有幫助嗎?

迭代直通所有兒童塑造帆布並檢查下列每個.... MyShape的

 hitArea 
     = new EllipseGeometry(
      new Point(Canvas.GetLeft(myShape), Canvas.GetTop(myShape)), 
      1.0, 
      1.0); 

    VisualTreeHelper.HitTest(
      myShape, null, 
      new HitTestResultCallback(HitTestCallback), 
      new GeometryHitTestParameters(hitArea)); 

    public HitTestResultBehavior HitTestCallback(HitTestResult result) 
    { 
     if (result.VisualHit == myShape) 
     { 
       //// This shape is on the visible area. 
     } 
    } 
+1

感謝您的答覆。我一直在讀這個。我如何獲得畫布的頂部和左側?我已將所有幾何對象添加到畫布。我在想如果我能得到畫布的邊界矩形,我可以做HitTest。 double left =(double)canvas1.GetValue(Canvas.LeftProperty); double top =(double)canvas1.GetValue(Canvas.TopProperty); 這給了我NaN。 – Sam

+0

使用此... http://social.msdn.microsoft.com/forums/en-US/wpf/thread/281a8cdd-69a9-4a4a-9fc3-c039119af8ed/ –