2012-05-03 81 views
1

我有一個DrawingVisual這樣的:如何獲得DrawingVisual區域

Rect MyRect = new Rect(new Point(0, 0), new Size(100, 100)); 
DrawingVisual MyVisual = new DrawingVisual(); 

using (DrawingContext context = MyVisual.RenderOpen()) { 
context.DrawRectangle(Brushes.Black, new Pen(), MyRect); 
context.PushTransform(new TranslateTransform(50, 50)); 
context.PushTransform(new ScaleTransform(2, 2)); 
} 

我想描述的元素的區域Geometry,在這種情況下RectangleGeometry,其中矩形屬性是:

Rect(new Point(50, 50), new Size(200, 200)) 

謝謝。

回答

3

,如果您繪製矩形前推轉換,你可以得到由ContentBounds屬性正確的邊界:

Rect rect = new Rect(new Size(100, 100)); 

using (DrawingContext dc = visual.RenderOpen()) 
{ 
    dc.PushTransform(new TranslateTransform(50, 50)); 
    dc.PushTransform(new ScaleTransform(2, 2)); 
    dc.DrawRectangle(Brushes.Black, null, rect); 
} 

System.Diagnostics.Trace.TraceInformation("Bounds = {0}", visual.ContentBounds); 

從備註部分中PushTransform

變換適用於所有後續繪圖命令,直到它被彈出命令刪除 。

+0

似乎工作,但在我的應用程序有一些奇怪的行爲(結果是{0,0,300,300})的情況下。請參閱[我的問題](http://stackoverflow.com/questions/10451066/visuals-hit-testing)。 – gliderkite

+0

更改了使用ContentBounds而不是DescendantBounds的答案。對不起,但我困惑這兩個。這有什麼區別嗎? – Clemens

+0

我會嘗試,我必須解決其他平行問題的問題。 – gliderkite